rq
v2.0
RQ( Redis 队列)是一个简单的 Python 库,用于对作业进行排队并在后台与工作人员一起处理它们。它由 Redis 支持,其设计门槛较低。它应该很容易集成到您的网络堆栈中。
RQ 要求 Redis >= 3.0.0。
完整的文档可以在这里找到。
如果您发现 RQ 有用,请考虑通过 Tidelift 支持该项目。
首先,当然是运行一个 Redis 服务器:
$ redis-server
要将作业放入队列,您不必执行任何特殊操作,只需定义通常很长或阻塞的函数:
import requests
def count_words_at_url ( url ):
"""Just an example function that's called async."""
resp = requests . get ( url )
return len ( resp . text . split ())
然后,创建一个 RQ 队列:
from redis import Redis
from rq import Queue
queue = Queue ( connection = Redis ())
并将函数调用排队:
from my_module import count_words_at_url
job = queue . enqueue ( count_words_at_url , 'http://nvie.com' )
安排作业也同样容易:
# Schedule job to run at 9:15, October 10th
job = queue . enqueue_at ( datetime ( 2019 , 10 , 10 , 9 , 15 ), say_hello )
# Schedule job to run in 10 seconds
job = queue . enqueue_in ( timedelta ( seconds = 10 ), say_hello )
还支持重试失败的作业:
from rq import Retry
# Retry up to 3 times, failed job will be requeued immediately
queue . enqueue ( say_hello , retry = Retry ( max = 3 ))
# Retry up to 3 times, with configurable intervals between retries
queue . enqueue ( say_hello , retry = Retry ( max = 3 , interval = [ 10 , 30 , 60 ]))
有关更完整的示例,请参阅文档。但这就是本质。
要开始在后台执行排队函数调用,请从项目目录启动一个工作线程:
$ rq worker --with-scheduler
*** Listening for work on default
Got count_words_at_url('http://nvie.com') from default
Job result = 818
*** Listening for work on default
就是这样。
只需使用以下命令即可安装最新发布的版本:
pip install rq
如果您想要最先进的版本(很可能会被破坏),请使用以下命令:
pip install git+https://github.com/rq/rq.git@master#egg=rq
要构建并运行文档,请安装 jekyll 并运行:
cd docs
jekyll serve
如果您使用 RQ,请查看下面的这些存储库,它们可能对您基于 RQ 的项目有用。
该项目的灵感来自于 Celery、Resque 和此代码片段的优秀部分,并且被创建为替代 Celery 或其他基于 AMQP 的队列实现的轻量级替代方案。