RQ ( Redis Queue ) เป็นไลบรารี 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 ลองดู repos ด้านล่างซึ่งอาจมีประโยชน์ในโปรเจ็กต์ที่ใช้ rq ของคุณ
โปรเจ็กต์นี้ได้รับแรงบันดาลใจจากส่วนดีๆ ของ Celery, Resque และตัวอย่างข้อมูลนี้ และถูกสร้างขึ้นเป็นทางเลือกแบบน้ำหนักเบาแทนความหนักหน่วงของ Celery หรือการใช้งานการจัดคิวแบบอิง AMQP อื่นๆ