一个非常简单的方法是cgi(与常规web服务器一起使用
wsgiref.handlers.CGIHandler
)在生产服务器上的性能很差,但对开发很好。您可以编写一个同时作为mod_wsgi wsgiscriptalias(公开
application
对象),并作为mod_cgi scriptalias(调用
wsgiref
什么时候
__name__=='__main__'
)
许多wsgi环境都有重新加载基本脚本的方法,例如mod_wsgi的
WSGIScriptReloading
,默认情况下处于启用状态。不幸的是,您可能会将大部分代码放在模块中,这并不容易重新加载。在mod_wsgi中,您还可以通过发送sigint来执行在守护进程模式下的重新加载。不幸的是,为了知道是否需要重新加载,您仍然需要嗅探用于mtime更新的每个模块。它在嵌入式模式下不工作。
一个混乱但可行的方法是嗅探属于应用程序一部分的所有模块,如果有自上次检查以来已更新的模块,则将它们全部重新加载。您必须立即重新加载它们,方法是从
sys.modules
查找(删除
None
-当你在那里的时候,为了避免相对的导入查找问题,也要有值的条目),以确保它们不会保留对旧版本的交叉引用。当然,他们不能在你的申请之外留下其他的参考资料。您可以在
ModuleUpdater
班
here
.
(这个软件还没有准备好发布,但是已经为我的wsgi应用程序提供模块重新加载了几年,而且看起来很稳定。其思想是将您的所有wsgi应用程序放在一个包中的一个应用程序类中,您可以从一个wsgi/cgi/command-line入口点脚本导入该包;您可以在该脚本中包含部署配置。)