当WSGI应用程序响应缓慢时,提供中间响应
项目描述
状态和许可证
Wait For It 在MIT样式许可证下发布。由Ian Bicking开发。有关问题,请访问Paste邮件列表;错误可以报告在Paste错误跟踪器中。
功能
Wait For It通过为每个传入请求启动一个额外的线程,即使在底层WSGI应用程序响应不是非常及时的情况下,也能为用户提供及时的响应。如果包装的应用程序在时间限制前及时响应,则简单地传递响应。
如果响应在时间限制之前没有返回,用户将收到一个响应页面,让他们等待。响应页面包含JavaScript,它将重新检查页面状态,当页面准备好时,将重新加载页面。
应用程序可以通过查找 environ['waitforit.progress'] 并在其中放置信息来向用户提供反馈。特别是 "message" 包含一个用于用户的 HTML 消息(例如,如果您想显示长时间运行的应用程序正在处理的步骤)。"percent" 用于进度条;它应该是从 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 设置为 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)。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分布
构建分布
WaitForIt-0.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | feeba8eae923a18e36546f240476efc0362033cc59b6d41f133d928370d75251 |
|
MD5 | 0b55a05078dce9ebceeebadbaf473952 |
|
BLAKE2b-256 | d5912770b9d84919b2588e19e280834b03843458c62dae0fbf39de8cdc27d47d |
WaitForIt-0.2-py2.4.egg 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ff9235d51370f1e1e79039dc472c80deca674f1a13654d4615fe9a11a4cde91c |
|
MD5 | 03199a022fa6701036a1c00dd3e7ff3d |
|
BLAKE2b-256 | f0240f4720908b702947c569c481652e9e6cb153049bd49f07b72cb17ad8f6a9 |