Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写可以自我更新而无需退出应用程序的python代码?_Python_Multithreading_Python Asyncio_Stateless_Python 3.5 - Fatal编程技术网

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

如何编写可以自我更新而无需退出应用程序的python代码?,python,multithreading,python-asyncio,stateless,python-3.5,Python,Multithreading,Python Asyncio,Stateless,Python 3.5,在python中创建高度集成的代码很容易,因此当应用程序的代码发生更改时,退出并重新启动应用程序是可以理解的 然而,它肯定存在一些策略和模型,以便能够隔离部分代码,从而可以在不需要退出和重新启动的情况下动态更新 对于我正在处理的应用程序,许多功能将是独立的后台任务,主应用程序将与之对话,显示状态信息,并指示根据当前状态执行任务。在许多方面,这些后台任务可以被看作是独立的程序,只是它们与主应用程序以及构建在其上的其他工具、任务等共享一些代码库 虽然可能很难让整个shebang live变得可更新,

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

然而,它肯定存在一些策略和模型,以便能够隔离部分代码,从而可以在不需要退出和重新启动的情况下动态更新

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

虽然可能很难让整个shebang live变得可更新,但我相信一定有一些方法可以推出更新,让运行的代码注意到并根据需要进行更新

由于我还热衷于利用多线程和异步IO(在Python3.5中),以及探索如何使事情无状态,因此在这里做一些有趣的事情似乎在逻辑上是可能的,至少可以避免在发布新代码时强制硬重启


非常感谢您提供有关如何使其工作的提示和提示。

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

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


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

您可能会感兴趣,谢谢@CoryKramer,这正是我要查找的信息。太棒了,这可能比我最初想象的要容易:)我相信flask和tornado都有这样的功能,所以你也可以看看它们的代码。谢谢@dano,flask是我作为几个项目的候选微框架之一,所以这使它更有趣。