RQ异步任务队列介绍 - Oejia 技术栈,企业方案分享、Odoo顾问
Oejia 技术栈
主页
分享
微信模块
索引
关于
订阅
编辑器
登录
RQ异步任务队列介绍
Oejia
on 2015-01-07 12:46:40
[TOC] > **引用:** > - RQ (Redis Queue) is a simple Python library for queueing jobs and processing them in the background with workers. It is backed by Redis and it is designed to have a low barrier to entry. It should be integrated in your web stack easily. #### :fa-file-o: 概述 目前后台业务系统有相当一部分数据任务是异步处理的,比如:通知转发的数据处理,微信主动反馈客户当前余额的任务,以及分享人与被分享人“得到了奖品”和“领取了奖品”的消息通知等等,而目前所有异步处理均是基于数据库来实现,关键是还没有做到统一结构和重用,使得在新的涉及异步处理的开发需求时都得重新各自实现一遍,这种做法的缺点是显而易见的,鉴于这些原因我们在项目中引入一个 **异步任务队列** 的统一框架 #### :fa-list: 特性 - 实现了python扩展的基于Redis的队列数据结构,可以像操作list一样使用 - 实现了方法参数级调用队列,即以方法参数为队列的方法重复调用 - 实现了异步队列服务,可以将所有要异步执行的各个方法直接加入到队列,由工作服务进程负责这些方法的统一执行 - 所有任务执行情况均可监控,有命令行脚本工具可以查询当前各队列的情况,更值得一提的是该模块提供一个web监控界面来查看当前所有队列以及各队列的任务执行情况,对于失败的任务,可以直接查看其在执行时的错误跟踪堆栈信息 #### :fa-book: 概念定义 - Job:任务,要执行的function - Worker:工作进程,实际执行队列的任务的进程 - Queue:队列,任务的集合 --- #### :fa-qrcode: 接口描述 ##### 扩展的队列数据结构 - 基本操作 定义一个队列结构 ```python >>> queue = HotQueue("myqueue") ``` 入队操作(支持python内置的几种数据类型) ```python >>> queue.put("my message") >>> queue.put({'name': "Richard Henry", 'eyes': "blue"}) ``` 出队操作 ```python >>> queue.get() "my message" >>> queue.get() {'name': 'Richard Henry', 'eyes': 'blue'} ``` 队列迭代 ```python >>> for item in queue.consume(): ... print item ``` - 详细接口 见 **hotqueue.py** 源码 ##### 方法参数级调用队列 - 基本示例 定义调用队列 ```python SquareQ = HotQueue("my_queue") @SquareQ.worker def square(num): print num * num ``` 队列操作 ```python SquareQ.put(2) SquareQ.put(3) SquareQ.put(4) ``` 工作进程执行 ```python >>> square() 4 9 16 ``` 当执行到为空时工作进程进入等待状态,直到有新的参数put到队列 ##### 异步队列服务 定义队列 ```python Q = Queue('queuename') def foo(s): print 'foo',s return s def boo(s): print 'boo',s return s ``` > **Tip:** 其中queuename为队列名称,在zkeco实际的应用中我们可以分别为数据上传,命令下发和自动计算分别命名为zksaas_adms、writedata和autocalculate三个队列,这样方便在web监控界面上分类查询 入队操作 ```python Q.put(foo,'one') Q.put(boo,'two') Q.put(foo,'three') ``` 运行工作进程服务 ``` # python manage.py runQueue ``` > **备注:** > - 入队操作时的function必须为非绑定方法,参数必须为可序列化的,比如模型实例object就不能作为参数序列化。 #### :fa-file-text: 说明 1. 执行失败的任务会转入failed 队列中 2. 消息数据存储方式:目前支持数据库存储和Redis高速存储两种,暂用mysql方式 3. 该“异步任务队列”支持执行异常消息的记录保持和重新入队执行功能,默认执行成功的消息记录直接删除 原开源项目地址:
Information
RQ异步任务队列介绍
http://www.oejia.net/blog/2015/01/07/rq_base.html
http://www.oejia.net/raw/2015/01/07/rq_base.md
Oejia
on 2015-01-07 12:46:40
Category
后端HTTP
Tag
Python
Web
Http
Related
2019-01-29 :
微信模块 Oejia_wx v0.5.7 发布,卡片消息及企业微信审批流消息的支持
2018-12-14 :
Odoo12 菜单定制模块 Oejia_menu v0.2.1 发布!
2018-11-23 :
基于 Django 实现的开源 FreeSwitch GUI —— YouPBX
2018-08-22 :
Odoo 微信模块企业版功能说明
2017-11-02 :
巧用 Odoo act_window 的 flags实现一些个性化的视图控制
2016-12-16 :
Oejia_wx v0.4.0 发布,支持 Odoo10 的微信模块
2016-06-13 :
DjangoX 的菜单控制与配置
2016-02-19 :
Python 运行参数解析的使用示例
2016-01-19 :
Odoo 的重要对象 Environment (env) 简析
2014-12-06 :
PyQt界面控件常用积累
官方公众号
关注公众号实时咨询我们
分类
Odoo (55)
DjangoX (11)
后端HTTP (7)
YouMd (4)
移动开发 (4)
Django (4)
公告说明 (2)
JS (2)
Python (1)
前端 (1)
Nginx (1)
桌面UI (1)
January 2019
Sun
Mon
Tue
Wed
Thu
Fri
Sat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
About This Entry
MoSys详细说明文档
示例参考文档
About This Blog
main index
to find recently
archives
to find all
标签
微信模块
Python
Web
Http
小程序商城
Cordova
客服系统
微信客服系统
HTML5
微信客服
Markdown
解析
DjangoX
微信模块发布记录
客服工单系统
ExtJS
示例
Excel
JS
新年
PyQT
YouPBX
扩展开发
最近发布
企业微信快捷OAuth接入Odoo的模块——WeOdoo
Odoo后端性能优化之—取消当访问页面404时对ir.attachment表的查询
微信模块 Oejia_wx v0.5.7 发布,卡片消息及企业微信审批流消息的支持
Odoo 前端扩展之—增加 html 型字段 widget,用于列表视图显示html内容
小程序商城模块 Oejia_weshop v0.1.3 发布,支持衔接Odoo库存的能力
Odoo 微信小程序商城模块 Oejia_weshop 常见问题处理
Odoo 多功能微信客服系统,无需专人值守电脑多终端回复
Odoo12 菜单定制模块 Oejia_menu v0.2.1 发布!
基于 Django 实现的开源 FreeSwitch GUI —— YouPBX
Odoo 菜单定制模块 Oejia_menu v0.2.0 发布!
Friend Links
Oejia技术梦博客分享
YouMd,爱上MarkDown
Mole轻量级wsgi架子