为什么不应该重新加载模块?

5
"模块和包:活着就让它死去!"第28页中(请参见视频),它说:

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

有人能解释一下为什么我们不应该在Python中重新加载模块吗?

重新加载模块?你的意思是导入一个模块两次吗? - Remi Guan
第一条规则:如果可能并且你需要它,先三思而后行。唯一的例外可能是编写核弹软件。那么就要三思而后行。 - HeinzKurt
2个回答

8

这里详细解释了重新加载:如何卸载(重新加载)Python模块?

简单点说:

有一些有效的用例,例如Django开发服务器。但总体而言,重新加载模块存在太多陷阱,不太实用。

两个最大的问题是:

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

  2. 没有一般方法可以重新加载带有C扩展名的模块。有些可以安全地重新加载;有些看起来可以安全地重新加载,但可能会泄漏,并且有些可能会崩溃您的解释器或产生奇怪的错误。


5
重新加载模块通常是在开发过程中进行的,这样您可以继续运行同一解释器会话,但可以获取您对模块所做的更改。实际上,在视频中已经有一个示例解释了这一点,大约在第11分钟左右。
但是,如果您发现自己正在编写依赖于模块在运行时更改和重新加载的实际功能代码,则应非常确保自己知道自己在做什么,并首先考虑其他选项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接