RQ,一個(gè)神奇的 Python 庫(kù)
RQ (Redis Queue) 是一個(gè)簡(jiǎn)單的 Python 庫(kù),用于將任務(wù)放入隊(duì)列并通過(guò)工作進(jìn)程(worker)在后臺(tái)執(zhí)行這些任務(wù)。它基于 Redis 構(gòu)建,是一個(gè)輕量級(jí)的異步任務(wù)隊(duì)列解決方案。

核心概念
主要組件:
- Queue: 存儲(chǔ)待處理任務(wù)的隊(duì)列
- Job: 表示一個(gè)待執(zhí)行的任務(wù)
- Worker: 從隊(duì)列中獲取任務(wù)并執(zhí)行的進(jìn)程
- Result: 任務(wù)執(zhí)行后的結(jié)果
工作流程:
- 將任務(wù)放入隊(duì)列
- Worker進(jìn)程從隊(duì)列獲取任務(wù)
- Worker執(zhí)行任務(wù)
- 存儲(chǔ)執(zhí)行結(jié)果(可選)
安裝
前置條件:首先你需要有一個(gè) redis,安裝好后,啟動(dòng) redis-server

安裝 RQ 庫(kù):
pip install rq
# 或通過(guò)github安裝
pip install -e git+git@github.com:nvie/rq.git@master#egg=rq基本使用
創(chuàng)建一個(gè)任務(wù)task:
# tasks.py
def task(message):
print(f"Processing: {message}")
return message.upper() # 示例處理創(chuàng)建一個(gè) Queue 及 Producer:
from redis import Redis
from rq import Queue
from mq.tasks import task # 從模塊導(dǎo)入,不是__main__
# 連接Redis
redis_conn = Redis()
# 創(chuàng)建隊(duì)列
q = Queue(cnotallow=redis_conn)
# 將任務(wù)加入隊(duì)列
job = q.enqueue(task, "hello,world")
print(f"Job enqueued with ID: {job.id}")啟動(dòng)Worker:
rq worker如果是windows操作系統(tǒng):
pip install rq-win
# 獲取使用 --worker-class 參數(shù)
rq worker --worker-class rq.worker.SimpleWorkerWorker 會(huì)開始監(jiān)聽隊(duì)列并執(zhí)行任務(wù)。
測(cè)試效果:
python producer.py
高級(jí)功能
獲取任務(wù)結(jié)果:
from redis import Redis
from rq.job import Job
redis_conn = Redis()
# 所有結(jié)果
# Job.results()
# 或通過(guò)job_id獲取
job_id = 'b6900938-6194-468c-9120-dc81f880c459'
job = Job.fetch(job_id, cnotallow=redis_conn)
print(job.latest_result())
# 輸出結(jié)果
# Result(id=1753630583817-0, type=SUCCESSFUL)設(shè)置任務(wù)超時(shí):
job = q.enqueue(task, args=("hello,world",), timeout=10)任務(wù)失敗重試:
job = q.enqueue(task, args=("hello,world",), retry=3)具體其它用法可參考資料:https://wxy2077.github.io/Python-rq-doc-cn
優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
- 簡(jiǎn)單易用,學(xué)習(xí)曲線平緩
- 基于Redis,無(wú)需額外依賴
- 輕量級(jí),適合小型到中型項(xiàng)目
- 良好的Python集成
缺點(diǎn):
- 功能相對(duì)基礎(chǔ),不適合復(fù)雜工作流
- 監(jiān)控和管理功能有限
- 性能不如一些更專業(yè)的隊(duì)列系統(tǒng)
替代方案:
- Celery: 功能更強(qiáng)大,但更復(fù)雜
- Huey: 輕量級(jí),支持多存儲(chǔ)后端
- Dramatiq: 現(xiàn)代設(shè)計(jì),性能優(yōu)秀
RQ 最適合需要簡(jiǎn)單任務(wù)隊(duì)列的小型到中型項(xiàng)目。對(duì)于更復(fù)雜的用例,可能需要考慮 Celery 等更強(qiáng)大的解決方案。



































