Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.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_Reload_Hotdeploy_Hotswap - Fatal编程技术网

使用Python进行热重新加载/交换

使用Python进行热重新加载/交换,python,reload,hotdeploy,hotswap,Python,Reload,Hotdeploy,Hotswap,我希望代码更改在开发过程中立即生效。如何检测已更改的文件并在运行的Python(2.7)应用程序中重新加载它们 编辑: 在阅读了由“ivovanderwijk”链接的页面之后,我认为最好在代码更改时重新启动web应用程序,就像Django那样。所以实际的问题是:这个问题已经被问过了 您可以使用重新加载(模块)来实现这一点,但要注意严重的副作用。例如,现有代码将基于原始代码,它不会神奇地添加新属性或基类。这对大多数应用程序没有意义,因为使用重新加载将产生副作用。再加上您在检测更改和重新加载所有模块

我希望代码更改在开发过程中立即生效。如何检测已更改的文件并在运行的Python(2.7)应用程序中重新加载它们

编辑:


在阅读了由“ivovanderwijk”链接的页面之后,我认为最好在代码更改时重新启动web应用程序,就像Django那样。所以实际的问题是:

这个问题已经被问过了


您可以使用重新加载(模块)来实现这一点,但要注意严重的副作用。例如,现有代码将基于原始代码,它不会神奇地添加新属性或基类。

这对大多数应用程序没有意义,因为使用
重新加载将产生副作用。再加上您在检测更改和重新加载所有模块的代码上花费的时间,可能只用于重新启动应用程序。如果您导入了很多模块,或者有一个包含许多子模块的项目,那么这将非常复杂


但在某些情况下,这是个好主意。Django web框架提供了一个开发服务器(
manage.py runserver
),可以自动重新加载更改的模块。看看
django.utils.autoreload
——它使用文件的修改时间测试所有Python文件的修改。如前所述,这只是一些应用程序的一个好主意。Web应用程序有点无状态,因此可以重新加载,几乎没有副作用。

我希望我的一些Python脚本也有同样的效果,所以我继续编写了SourceChangeMonitor.py脚本。你可以在说明书中找到它。如果您只需要脚本,那么当模块发生更改时,Django将重新加载整个程序。重新加载单个模块是非常危险的,特别是当您在开发过程中这样做时,它将导致的问题将与您试图修复的实际错误混合在一起,严重地加剧了问题。谢谢,我喜欢它。如果有人感兴趣,我将其移植到python3: