Web.py Cookbook 简体中文版 - 如何使用web.background
注意!! web.backgrounder已转移到web.py 3.X实验版本中,不再是发行版中的一部分。你可以在这里下载,要把它与application.py放置在同一目录下才能正运行。
介绍
web.background和web.backgrounder都是python装饰器,它可以让某个函式在一个单独的background线程中运行,而主线程继续处理当前的HTTP请求,并在稍后报告background线程的状态(事实上,后台函式的标准输出(stdout)被返回给启动该线程的”backrounder”)。 译注:我本来想将background thread翻译为后台线程,后来认为作者本意是想表达“被background修饰的函式所在的线程”,最后翻译采用“background线程”
这样,服务器就可以在处理其他http请求的同时,快速及时地响应当前客户端请求。同时,background线程继续执行需要长时间运行的函式。
例子
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from web import run, background, backgrounder
from datetime import datetime; now = datetime.now
from time import sleepurls = ('/', 'index',)class index:@backgrounderdef GET(self):print "Started at %s" % now()print "hit f5 to refresh!"longrunning()@background
def longrunning():for i in range(10):sleep(1)print "%s: %s" % (i, now())if __name__ == '__main__':run(urls, globals())
在请求http://localhost:8080/时,将自动重定向到类似http://localhost:8080/?_t=3080772748的网址(t后面的数字就是background线程id),接下来(在点击几次刷新之后)就会看到如下信息:
Started at 2008-06-14 15:50:26.764474
hit f5 to refresh!
0: 2008-06-14 15:50:27.763813
1: 2008-06-14 15:50:28.763861
2: 2008-06-14 15:50:29.763844
3: 2008-06-14 15:50:30.763853
4: 2008-06-14 15:50:31.764778
5: 2008-06-14 15:50:32.763852
6: 2008-06-14 15:50:33.764338
7: 2008-06-14 15:50:34.763925
8: 2008-06-14 15:50:35.763854
9: 2008-06-14 15:50:36.763789
提示
web.py在background.threaddb字典中保存线程信息。这就很容易检查线程的状态;
class threaddbviewer:def GET(self):for k, v in background.threaddb.items():print "%s - %s" % ( k, v )
web.py并不会主动去清空threaddb词典,这使得输出(如http://localhost:8080/?_t=3080772748)会一直执行,直到内存被用满。
通常是在backgrounder函式中做线程清理工作,是因为backgrounder可以获得线程id(通过web.input()得到”_t”的值,就是线程id),从而根据线程id来回收资源。这是因为虽然background能知道自己何时结束,但它无法获得自己的线程id,所以background无法自己完成线程清理。
还要注意 How not to do thread local storage with Python 在python中如何避免多线程本地存储 - 线程ID有时会被重用(可能会引发错误)
在使用web.background时,还是那句话--“小心为上”
转载于:https://www.cnblogs.com/justjavac/archive/2012/11/26/webpy-cookbook-background.html
Web.py Cookbook 简体中文版 - 如何使用web.background相关推荐
- Web.py Cookbook 简体中文版 - Hello World!
问题 如何用web.py实现Hello World!? 解法 import weburls = ("/.*", "hello") app = web.appli ...
- Web.py Cookbook 简体中文版 - 用cherrypy提供SSL支持
问题 如何用内置的cheerypy提供SSL支持? 解法 import webfrom web.wsgiserver import CherryPyWSGIServerCherryPyWSGIServ ...
- Web.py Cookbook 简体中文版 - 保存上传的文件
问题 上传文件,并将其保存到预先设定的某个目录下. 方法 import weburls = ('/upload', 'Upload')class Upload:def GET(self):web.he ...
- Web.py Cookbook 简体中文版 - 在webpy中使用Cheetah模板引擎
问题: 怎样在webpy中使用Cheetah模板引擎? 解决: 您需要先安装webpy(0.3)和Cheetah:http://www.cheetahtemplate.org/. 然后尝试使用下面的代 ...
- python web py入门(1)-web.py简介和安装
1.web.py 简介 web.py是一个轻量级的python web框架,简单而且功能强大.相对flask和Django,web.py更适合初学者来学习和了解web开发的基础知识. 2.web.py ...
- python web.py 404_找不到web.py开发服务器-favicon.ico-404
py API文档引用了一个"web.SEE OTHER()"函数,该函数生成一个 '303 SEE OTHER'响应,将浏览器重定向到另一个位置. (请参见http://webpy ...
- 简单而直接的Python web 框架:web.py
From:https://www.oschina.net/question/5189_4306 Web.py github 地址:https://github.com/webpy/webpy ...
- 一个强大而简单的 Python Web框架:web.py
From:https://www.oschina.net/question/5189_4306 Web.py github 地址:https://github.com/webpy/webpy ...
- web.py搭建服务器
python搭建服务器 ------------------安装web.py------------------------ Windows10 python3.5 安装web.py问题 pip ...
最新文章
- 少走弯路:强烈推荐的TensorFlow快速入门资料(可下载)
- GitHub:数据科学最全资料集合
- http304缓存 php,通过http头设置http缓存
- 多年iOS开发经验总结(一)
- 内核对象管理:Slab,Slub
- extjs6 引入ux_关于UX以及如何摆脱UX的6种常见误解
- 高阶篇:8.1)开模前评审及提交资料;
- Netty技术细节源码分析-内存池之PoolChunk设计与实现
- python scapy sniffer停止抓包_如果没有收到数据包,如何告诉scapy sniff()停止?
- FlexSPI对写时序支持
- php图片翻转函数,PHP图片处理之图片旋转和图片翻转实例
- (转载)ARM的字对齐问题总结
- 短视频仿抖音源码--探索短视频+时代
- 所谓的开发是java还是PLC_SCL是否将成为PLC的主流编程语言?
- ubuntu12.04安装配置opensips,搭建voip服务器
- Java算法面试题(008) 字符串反转
- MATLAB结构模态分析
- 这些实用的WhatsApp工具,赶快用起来
- 面试题10:青蛙跳台阶
- html加载三维地图,Cesium加载三维地形及WMS地图,并实现动态控制显示
热门文章
- 五款救急的linux文件恢复软件,五款救急的Linux文件恢复软件
- java calendar 毫秒_java Calendar(将时间精确到毫秒)
- 如何抓取html请求,怎么获取请求头
- 计算机办公应用软件初级,电脑办公软件有哪些?桌面便签办公软件基础教程
- 嵌套页面h5怎么调起手机文件_让微信公众号文章排版像网页h5一样高大上
- 操作系统分区分配java算法_合肥工业大学操作系统课程设计 动态分区分配存储管理java版.doc...
- java集合清空_java 集合删除数据
- react封装函数_react request.js 函数封装
- postgresql中装gis插件_PostgreSQL插件PostGIS安装
- 生产调度java程序原码_Rxjava的线程调度源码解析