我有一个长期运行的 Python 服务器,并且希望能够在不重新启动服务器的情况下升级服务。最好的方法是什么?
if foo.py has changed:
unimport foo <-- How do I do this?
import foo
myfoo = foo.Foo()
原文由 Mark Harrison 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个长期运行的 Python 服务器,并且希望能够在不重新启动服务器的情况下升级服务。最好的方法是什么?
if foo.py has changed:
unimport foo <-- How do I do this?
import foo
myfoo = foo.Foo()
原文由 Mark Harrison 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 Python 3.0–3.3 中,您将使用: imp.reload(module)
但是, imp
在 3.4 中已弃用,取而代之的是 importlib
(感谢 @Stefan! )。
因此,我 认为 您现在可以使用 importlib.reload(module)
,尽管我不确定。
原文由 Paul D. Waite 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答843 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
您可以使用
importlib.reload()
导入模块后重新加载模块:在 Python 2 中,
reload
是内置函数。在 Python 3 中,它被 移动 到imp
模块。在 3.4 中,imp
被 弃用,取而代之的是importlib
。当目标为 3 或更高版本时,要么在调用reload
时引用适当的模块,要么导入它。我认为这就是你想要的。像 Django 的开发服务器这样的 Web 服务器使用它,以便您可以在不重新启动服务器进程本身的情况下查看代码更改的效果。
引用文档:
正如您在问题中指出的那样,如果
Foo
类位于foo
模块中,则必须重建Foo
对象。