据我所知
那里有其他人吗?你更喜欢哪一个?
答案 0 :(得分:4)
您可能希望查看的是Werkzeug - 它是一个WSGI实用工具包。它包含一个runserver函数,它接受wsgiref服务器并添加自动代码重新加载(您还可以将其配置为在配置文件更改时重新加载)和一个非常棒的调试器。
另一方面,您对框架的蔑视使得听起来您计划从头开始处理所有WSGI内容,在这种情况下,我建议您使用Werkzeug的实用程序函数来处理解析请求和生成响应。这比自己做的更有趣。 (为了Guido的爱,请不要使用cgi.FieldStorage
!)
答案 1 :(得分:4)
从werkzeug查看run_simple:
http://werkzeug.pocoo.org/documentation/0.5.1/serving.html
除了为您提供自动代码重新加载之外,您还可以使用use_debugger = True将其漂亮的调试器包含在您的应用程序之上(其中包括每个回溯行中的控制台)。
答案 2 :(得分:1)
到目前为止,我一直在使用CherryPy,并且与Django(虽然不在你的列表中,是我使用的唯一其他开发服务器)相比,我更喜欢它。它说的是:它只在你需要的时候出现,并在其余的时间里不受影响。
使用Django似乎我需要订阅Django的做事方式。虽然Django提供了更多功能(开源)(默认管理界面,网页上的小部件),但使用CherryPy似乎只是另一个非常好的(通常令人惊讶的是额外的)功能。
答案 3 :(得分:1)
我建议粘贴或CherryPy。他们最容易起床和跑步。
答案 4 :(得分:1)
一种非常简单的方法是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 /命令行入口点脚本导入;您可以在该脚本中包含部署配置。)
答案 5 :(得分:1)
另外,你错过了web.py,它既小又支持代码重新加载。
答案 6 :(得分:0)
除了其他粘贴模块之外,您可以将paste.reloader与任何wsgi-server一起使用。
# run paste reloader import paste.reloader as reloader reloader.install() # run wsgiref server from wsgiref import simple_server simple_server.make_server('', 8080, main_wsgi_app).serve_forever()
那是否足够简约?