当 WSGI 应用程序响应缓慢时提供中间响应
项目描述
状态和许可证
Wait For It是根据MIT 风格的许可证分发的。是伊恩·比金写的。问题可以去粘贴邮件列表;错误可以在 粘贴错误跟踪器中报告。
它能做什么
即使底层 WSGI 应用程序不是很及时,Wait For It 也可以为用户提供及时的响应。Wait For It 通过为每个传入的请求启动一个额外的线程来完成此操作。如果包装的应用程序及时响应(在time_limit之前),则简单地传递响应。
如果响应没有在时间限制之前返回,用户将获得一个要求他们等待的响应页面。响应页面包含将重新检查页面状态的 Javascript,当页面准备好时,它将重新加载页面。
应用程序可以通过查找environ['waitforit.progress']并将信息放入其中来向用户提供反馈 。特别是“消息”包含给用户的 HTML 消息(例如,如果您想显示长时间运行的应用程序正在执行的步骤)。 “百分比”用于进度条;它应该是一个从 0 到 100 的数字。正在进行的值是通过 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进行安装。您还可以使用easy_install WaitForIt==dev从主干安装最新的代码。您可以在svn 存储库中看到最新的代码,或者像这样查看它:
svn co http://svn.pythonpaste.org/Paste/WaitForIt/trunk WaitForIt
例子
要查看一个简单的示例,请参阅waitforit.testapp。你可以像python waitforit/testapp.py一样运行它(或者如果你使用 Python 2.5,python -m waitforit.testapp)。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。