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

tsv*_*son 6 python multithreading stateless python-asyncio python-3.5

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

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

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

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

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

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

Don*_*kby 2

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

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

我没有使用过它,但看门狗可能有助于监视文件系统的更改以触发重新加载。