【问题标题】:Why are you never supposed to reload modules? [duplicate]为什么你永远不应该重新加载模块? [复制]
【发布时间】:2015-12-27 21:34:56
【问题描述】:

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

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

谁能解释为什么我们不应该在 Python 中重新加载模块?

【问题讨论】:

  • 重新加载模块?你的意思是两次导入一个模块?
  • 第一条规则:如果可能并且您需要它,请三思而后行。唯一的例外可能是为核弹编程软件。然后三思而后行。

标签: python python-3.x module reload


【解决方案1】:

这里详细解释重载:How do I unload (reload) a Python module?

tl;rd

reload 有一些有效的用例,例如 Django 开发服务器。但总的来说,重新加载模块有太多需要注意的地方。

两个最大的问题是:

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

  2. 没有通用的方法来重新加载带有 C 扩展的模块。有些可能会安全地重新加载;有些似乎可以安全地重新加载,但会泄漏,有​​些可能会使您的解释器崩溃或产生奇怪的错误。

【讨论】:

    【解决方案2】:

    重新加载模块是您在开发过程中通常会做的事情,因此您可以继续运行相同的解释器会话,但可以在其中获取您对模块所做的更改。这实际上在视频中进行了解释,并附有示例,来自about 11 minutes in

    但是,如果您发现自己编写的实际功能依赖于在运行时更改和重新加载的模块,那么您应该非常确定自己知道自己在做什么并首先考虑过其他选项.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      相关资源
      最近更新 更多