Skip to main content

当 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)。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

WaitForIt-0.2.tar.gz (7.9 kB 查看哈希

已上传 source

内置分布

WaitForIt-0.2-py2.4.egg (13.2 kB 查看哈希

已上传 2 4