注意!! 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相关推荐

  1. Web.py Cookbook 简体中文版 - Hello World!

    问题 如何用web.py实现Hello World!? 解法 import weburls = ("/.*", "hello") app = web.appli ...

  2. Web.py Cookbook 简体中文版 - 用cherrypy提供SSL支持

    问题 如何用内置的cheerypy提供SSL支持? 解法 import webfrom web.wsgiserver import CherryPyWSGIServerCherryPyWSGIServ ...

  3. Web.py Cookbook 简体中文版 - 保存上传的文件

    问题 上传文件,并将其保存到预先设定的某个目录下. 方法 import weburls = ('/upload', 'Upload')class Upload:def GET(self):web.he ...

  4. Web.py Cookbook 简体中文版 - 在webpy中使用Cheetah模板引擎

    问题: 怎样在webpy中使用Cheetah模板引擎? 解决: 您需要先安装webpy(0.3)和Cheetah:http://www.cheetahtemplate.org/. 然后尝试使用下面的代 ...

  5. python web py入门(1)-web.py简介和安装

    1.web.py 简介 web.py是一个轻量级的python web框架,简单而且功能强大.相对flask和Django,web.py更适合初学者来学习和了解web开发的基础知识. 2.web.py ...

  6. python web.py 404_找不到web.py开发服务器-favicon.ico-404

    py API文档引用了一个"web.SEE OTHER()"函数,该函数生成一个 '303 SEE OTHER'响应,将浏览器重定向到另一个位置. (请参见http://webpy ...

  7. 简单而直接的Python web 框架:web.py

    From:https://www.oschina.net/question/5189_4306 Web.py github 地址:https://github.com/webpy/webpy      ...

  8. 一个强大而简单的 Python Web框架:web.py

    From:https://www.oschina.net/question/5189_4306 Web.py github 地址:https://github.com/webpy/webpy      ...

  9. web.py搭建服务器

    python搭建服务器 ------------------安装web.py------------------------ Windows10 python3.5 安装web.py问题    pip ...

最新文章

  1. 少走弯路:强烈推荐的TensorFlow快速入门资料(可下载)
  2. GitHub:数据科学最全资料集合
  3. http304缓存 php,通过http头设置http缓存
  4. 多年iOS开发经验总结(一)
  5. 内核对象管理:Slab,Slub
  6. extjs6 引入ux_关于UX以及如何摆脱UX的6种常见误解
  7. 高阶篇:8.1)开模前评审及提交资料;
  8. Netty技术细节源码分析-内存池之PoolChunk设计与实现
  9. python scapy sniffer停止抓包_如果没有收到数据包,如何告诉scapy sniff()停止?
  10. FlexSPI对写时序支持
  11. php图片翻转函数,PHP图片处理之图片旋转和图片翻转实例
  12. (转载)ARM的字对齐问题总结
  13. 短视频仿抖音源码--探索短视频+时代
  14. 所谓的开发是java还是PLC_SCL是否将成为PLC的主流编程语言?
  15. ubuntu12.04安装配置opensips,搭建voip服务器
  16. Java算法面试题(008) 字符串反转
  17. MATLAB结构模态分析
  18. 这些实用的WhatsApp工具,赶快用起来
  19. 面试题10:青蛙跳台阶
  20. html加载三维地图,Cesium加载三维地形及WMS地图,并实现动态控制显示

热门文章

  1. 五款救急的linux文件恢复软件,五款救急的Linux文件恢复软件
  2. java calendar 毫秒_java Calendar(将时间精确到毫秒)
  3. 如何抓取html请求,怎么获取请求头
  4. 计算机办公应用软件初级,电脑办公软件有哪些?桌面便签办公软件基础教程
  5. 嵌套页面h5怎么调起手机文件_让微信公众号文章排版像网页h5一样高大上
  6. 操作系统分区分配java算法_合肥工业大学操作系统课程设计 动态分区分配存储管理java版.doc...
  7. java集合清空_java 集合删除数据
  8. react封装函数_react request.js 函数封装
  9. postgresql中装gis插件_PostgreSQL插件PostGIS安装
  10. 生产调度java程序原码_Rxjava的线程调度源码解析