为什么你永远不应该重装模块?

时间:2015-09-30 07:30:33

标签: python python-3.x module reload

"Modules and Packages: Live and Let Die!",第28页(另见the video)中,它说:

  

您可以强制重新加载模块,但是您可以    从来不应该这样做。

有谁可以解释为什么我们不应该用Python重新加载模块?

2 个答案:

答案 0 :(得分:6)

此处详细说明了重新加载:How do I unload (reload) a Python module?

<强> TL; RD

reload有一些有效的用例,比如Django开发服务器。但总的来说,重新加载模块有太多的警告是不切实际的。

最大的两个问题是:

  1. 要完全卸载旧对象,必须确保没有其他模块或对象保留对它们的引用(这通常是不可能的)。如果您在这里失败,您可能会遇到难以追踪的内存泄漏或意外行为。

  2. 没有通用的方法来重新加载带有C扩展名的模块。有些人可能安全重装;有些人似乎可以安全地重新加载,但是泄漏,有些可能会使你的翻译崩溃或产生奇怪的错误。

答案 1 :(得分:2)

重新加载模块是开发过程中通常会执行的操作,因此您可以继续运行相同的解释程序会话,但可以对其中的模块进行更改。实际上,这在视频中有一个例子,来自about 11 minutes in

但是,如果您发现自己编写了依赖于模块更改并在运行时重新加载的实际功能,那么您应该确定自己知道自己在做什么,并考虑过其他问题。选择第一。