如何编写可自行更新的python代码而无需退出应用程序?

时间:2015-12-30 13:23:21

标签: python multithreading python-asyncio stateless python-3.5

在python中创建高度集成的代码很容易,因此在更改代码时退出并重新启动应用程序的需求是可以理解的。

但是,肯定必须存在一些策略和模型才能隔离部分代码,以便在不需要退出和重新启动的情况下即时更新。

对于我正在处理的应用程序,许多功能将是主应用程序将与之通信的独立后台任务,显示状态信息以及指示基于当前状态执行任务。在许多方面,这些后台任务可以看作是独立的程序,只是它们与主应用程序和其他工具,任务等共享一些代码库。

虽然可能很难让整个shebang实时更新,但我确信必须有可能推出更新并让运行代码根据需要注意和更新自己的方法。

由于我也热衷于利用多线程和asyncio(在Python 3.5中),以及探索使事情无状态,​​在逻辑上可以做一些有趣的事情,至少可以避免一些强迫在推出新代码时硬重启。

非常感谢有关如何使其正常工作的信息的提示和指示。

1 个答案:

答案 0 :(得分:2)

有一个内置函数reload()可以重新加载模块,但它很容易搞砸。您必须非常小心保存对旧版本模块创建的对象的引用,然后确保在重新加载模块时替换它们。

我经常使用Django,当它以调试模式运行其Web服务器时,只要源文件发生变化,它就会重新加载整个Web服务器进程。在手动重启和重新加载单个模块之间,这是一个很好的折衷方案。

我还没有使用它,但watchdog可能有助于监控文件系统的更改以触发重新加载。