跳转到主要内容

当WSGI应用程序响应缓慢时,提供中间响应

项目描述

状态和许可证

Wait For ItMIT样式许可证下发布。由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 (7.9 kB 查看哈希值)

上传时间 源代码

构建分布

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

上传时间 源代码

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面