RQ ( Redis Queue ) 是一个简单易用的 Python 任务队列库
RQ 是异步执行的,前台可以简单的将任务加入队列,然后单独启动一个或多个工作进程来处理这些任务
RQ 设计的初衷就是降低使用队列的门槛,可以轻松的集成到任何需要队列的应用程序中
RQ 中的 R
是 Redis 的意思,也就是说 RQ 基于 Redis
安装
-
Redis
RQ 要求 Redis 的最低版本为
2.7.0
。关于如何安装 Redis,请移步 Redis 基础教程:Redis 安装 -
RQ
使用以下命令安装 RQ 最新发布的稳定版本
pip install rq
如果想要尝试当前最新的开发版本,可以使用下面的命令
pip install -e git+git@github.com:nvie/rq.git@master#egg=rq
额外安装
因为我们模拟的任务是抓取网页,使用 requests
库来完成这个任务
所以还需要下面的命令来安装 requests
pip install requests
简单使用
RQ 的使用可以简单分为两大步
将任务加入队列
-
启动 Redis 服务,我们假设 Redis 服务的地址为
127.0.0.1:6379
也就是使用默认的配置
-
假如我们的任务是抓取某个网页的内容,所以写了如下函数来获取网页内容
task.py
import requests def count_words_at_url(url): resp = requests.get(url) return resp.text
-
创建一个 RQ 实例,然后连接到 Redis 服务
main.py
from redis import Redis from rq import Queue import task q = Queue(connection=Redis())
-
比如要抓取本站首页 https://www.twle.cn,我们可以把这个任务加入到队列中
main.py
from redis import Redis from rq import Queue import task q = Queue(connection=Redis()) result = q.enqueue( task.count_words_at_url, 'https://www.twle.cn')
启动工作进程,处理实际任务
为了在后台处理队列中的任务,需要在当前项目下启动一个工作进程,启动命令很简单
[root@localhost ~]# rq worker *** Listening for work on default Got count_words_at_url('https://www.twle.cn') from default Job result = 818 *** Listening for work on default
启动命令的位置无所谓,只要能够识别出
rq
命令即可
ok. 完成了
设计思想
RQ 的灵感来自于 Celery,Resque 和这个 代码片段
RQ 应该是现有队列框架中的最为轻量的那个,入门门槛非常低
目前尚无回复