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

6

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

但是,一定存在某些策略和模型,使得能够隔离代码的部分,以便无需退出和重新启动即可进行实时更新。

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

虽然可能很难使整个程序都能实时更新,但我相信一定有办法可以推出更新,并且运行中的代码会自动检测到并进行更新。

由于我还想利用Python 3.5中的多线程和asyncio,以及探索使事物无状态化,因此似乎在这里可以做一些有趣的东西,至少可以避免在推出新代码时进行强制硬重启。

如果您知道如何使这种方法生效的提示和指针的信息,将不胜感激。


3
你可能会对这个问题感兴趣。 - Cory Kramer
谢谢@CoryKramer,这正是我正在寻找的信息。太棒了,这可能比我最初想象的要容易 :) - tsvenson
1
我相信Flask和Tornado都有类似的功能,所以你可以看一下它们的代码。 - dano
谢谢@dano,Flask是我正在考虑作为几个项目候选的微框架之一,这让它变得更加有趣。 - tsvenson
1个回答

2

Python内置有一个函数reload(),可以重新加载一个模块,但很容易出错。您需要非常小心地处理对旧版本模块创建的对象的引用,然后在重新加载模块时确保替换这些对象。

我经常使用 Django,在调试模式下运行其Web服务器时,每当源文件更改时就会重新加载整个Web服务器进程。这是手动重启和重新加载单个模块之间的不错折中方案。

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


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