使用Python进行热重新加载/交换
我希望代码更改在开发过程中立即生效。如何检测已更改的文件并在运行的Python(2.7)应用程序中重新加载它们 编辑:使用Python进行热重新加载/交换,python,reload,hotdeploy,hotswap,Python,Reload,Hotdeploy,Hotswap,我希望代码更改在开发过程中立即生效。如何检测已更改的文件并在运行的Python(2.7)应用程序中重新加载它们 编辑: 在阅读了由“ivovanderwijk”链接的页面之后,我认为最好在代码更改时重新启动web应用程序,就像Django那样。所以实际的问题是:这个问题已经被问过了 您可以使用重新加载(模块)来实现这一点,但要注意严重的副作用。例如,现有代码将基于原始代码,它不会神奇地添加新属性或基类。这对大多数应用程序没有意义,因为使用重新加载将产生副作用。再加上您在检测更改和重新加载所有模块
在阅读了由“ivovanderwijk”链接的页面之后,我认为最好在代码更改时重新启动web应用程序,就像Django那样。所以实际的问题是:这个问题已经被问过了
您可以使用重新加载(模块)来实现这一点,但要注意严重的副作用。例如,现有代码将基于原始代码,它不会神奇地添加新属性或基类。这对大多数应用程序没有意义,因为使用
重新加载将产生副作用。再加上您在检测更改和重新加载所有模块的代码上花费的时间,可能只用于重新启动应用程序。如果您导入了很多模块,或者有一个包含许多子模块的项目,那么这将非常复杂
但在某些情况下,这是个好主意。Django web框架提供了一个开发服务器(manage.py runserver
),可以自动重新加载更改的模块。看看django.utils.autoreload
——它使用文件的修改时间测试所有Python文件的修改。如前所述,这只是一些应用程序的一个好主意。Web应用程序有点无状态,因此可以重新加载,几乎没有副作用。我希望我的一些Python脚本也有同样的效果,所以我继续编写了SourceChangeMonitor.py脚本。你可以在说明书中找到它。如果您只需要脚本,那么当模块发生更改时,Django将重新加载整个程序。重新加载单个模块是非常危险的,特别是当您在开发过程中这样做时,它将导致的问题将与您试图修复的实际错误混合在一起,严重地加剧了问题。谢谢,我喜欢它。如果有人感兴趣,我将其移植到python3: