python - 如何编写无需退出应用程序即可 self 更新的python代码?

标签 python multithreading python-asyncio stateless python-3.5

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

但是,它肯定必须存在一些策略和模型来隔离部分代码,这样它就可以即时更新,而无需退出和重新启动。

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

虽然可能很难使整个 shebang 实时更新,但我确信必须有一些方法可以推出更新并让正在运行的代码注意到并根据需要进行 self 更新。

因为我也热衷于利用多线程和 asyncio(在 Python 3.5 中),以及探索使事情变得无状态,所以在这里做一些有趣的事情似乎在逻辑上是可能的,至少可以避免一些强制性的事情推出新代码时硬重启。

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

最佳答案

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

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

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

关于python - 如何编写无需退出应用程序即可 self 更新的python代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34530414/

相关文章:

python - 仅在第一次出现分隔符时拆分字符串

multithreading - 线程更新 GUI

.net - RabbitMQ 与 .NET

progress-bar - 使用tqdm的asyncio aiohttp进度栏

python - aiohttp如何在一个类中保存一个持久化的ClientSession?

python - 用于捕获数据的简单 UI

python - 如何获取每个字符串变体以及每个位置的可能性列表

python - 滑冰计分系统

c# - 任务不包含 Run 方法的定义

Python 异步事件循环。完成异步任务后永远运行循环