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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java无法在未设置数据源的情况下启动springboot应用程序   返回/泛型的类型?   java通过在navigationView中按id重新加载navigationView内容   java实现安卓的状态更新   java Equals()对于两个相等的字符串不返回true   java如何保存屏幕截图(matlab)   java GWT如何在重新加载页面之前确保函数已完全执行   java在Groovy中实现ObjectJSON映射的标准方法是什么?   java在ApacheTomcat中,是否可以通过连接器过滤多个访问日志文件?   java当JVM达到其Xmx限制时,它会强制垃圾收集吗?   如何在JAVA中生成包含特定数字的不同随机数列表?   rcp中透视图之间的java切换   java理解名为“分区”的Linkedlist算法中的无限循环   RestTemplate的java测微计统计信息   Android中使用自定义服务BLE的java读/写特性   java验证输入以确保负数   关于Java扫描器的io基本查询   java如何使用子字符串或其他函数将字符串拆分为单词?   java Storm群集重复元组