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 的隊列實現的輕量級替代方案。