标签归档:delayed-tasks

Rq Python的简单作业队列

RQ(Redis队列)是一个简单的Python库,用于对作业进行排队并在后台与工作者一起处理它们。它是由Redis支持的,它的设计是为了有一个较低的屏障进入。它应该很容易集成到您的Web堆栈中

RQ需要Redis>=3.0.0



可以找到完整的文档here

支持RQ

如果您发现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())

你确实用了优秀的requests包裹,不是吗?

然后,创建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, 8, 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]))

有关更完整的示例,请参阅docs但这才是最本质的

这位工人

要开始在后台执行入队的函数调用,请从项目的目录中启动一个工作器:

$ 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/nvie/rq.git@master#egg=rq

相关项目

请查看下面这些可能对您的基于RQ的项目有用的报告

项目历史记录

这个项目的灵感来自于CeleryResquethis snippet,并作为celery或其他基于amqp的排队实现的轻量级替代方案而创建。