当wsgi应用程序响应缓慢时提供中间响应
WaitForIt的Python项目详细描述
状态和许可证
wait for it分布在MIT-style license下。是伊恩写的 吵架。问题可以转到Paste mailing list;错误可以在 Paste Bug Tracker。
它的功能
等待它给用户一个及时的响应,即使在底层 wsgi应用程序不是很及时。等它来做这个 为每个传入请求启动一个额外线程。如果包裹的 应用程序及时响应(在time_limit之前) 响应只是传递。
如果响应没有在时间限制之前返回,则用户是 给出一个让他们等待的响应页面。响应页 包含将重新检查页面状态的javascript,以及 当页面准备就绪时,它将重新加载页面。
应用程序可以通过查找 environ['waitforit.progress']并将信息放入其中。 尤其是"message"包含用户的html消息 (例如,如果您想显示长期运行的应用程序是什么步骤 正在处理)。"percent"用于进度条;它应该是 数字从0到100。progress中的值通过json发送,因此 您应该只使用字符串(最好是Unicode)、整数、浮点数, 字典(带字符串键)和列表。
使用它
像这样包装应用程序:
from waitforit import WaitForIt fast_app = WaitForIt(slow_app, time_limit=5, poll_time=10)
如果slow_app花费的时间超过5秒,则转换页是 展示。转换页检查响应是否完成 每10秒。(两个参数的默认值都是10 秒。)
在您的应用程序中,您可以执行以下操作:
def slow_app(environ, start_response): progress = environ.get('waitforit.progress', {}) for i in range(100): progress['message'] = 'I have completed %s out of 100 tasks' % i progress['percent'] = i ... handle response ...
如果一些请求应该同步处理(即使它们 可能很慢)您可以使用:
def slow_app(environ, start_response): progress = environ.get('waitforit.progress', {}) if you_should_really_wait_for_this_to_return(environ): progress['synchronous'] = True ...
也就是说,设置environ['waitforit.progress']['synchronous'] = True如果及时完成,将使waitforit不被拦截 请求。
下载和安装
您可以使用easy_install WaitForIt安装。您也可以安装 来自trunk的最新代码,easy_install WaitForIt==dev。 您可以在the svn repository中看到最新的代码, 或者像这样查看:
svn co http://svn.pythonpaste.org/Paste/WaitForIt/trunk WaitForIt
示例
要查看一个简单的示例,请参见waitforit.testapp。您可以像python waitforit/testapp.py那样运行它(或者如果您使用的是python 2.5,python -m waitforit.testapp)。