RQ ( Redis Queue ) ist eine einfache Python-Bibliothek zum Einreihen von Jobs in die Warteschlange und deren Verarbeitung im Hintergrund mit Workern. Es wird von Redis unterstützt und ist auf eine niedrige Eintrittsbarriere ausgelegt. Es sollte problemlos in Ihren Web-Stack integriert werden können.
RQ erfordert Redis >= 3.0.0.
Die vollständige Dokumentation finden Sie hier.
Wenn Sie RQ nützlich finden, denken Sie bitte darüber nach, dieses Projekt über Tidelift zu unterstützen.
Führen Sie zunächst natürlich einen Redis-Server aus:
$ redis-server
Um Jobs in Warteschlangen zu stellen, müssen Sie nichts Besonderes tun. Definieren Sie lediglich Ihre normalerweise langwierige oder blockierende Funktion:
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 ())
Erstellen Sie dann eine RQ-Warteschlange:
from redis import Redis
from rq import Queue
queue = Queue ( connection = Redis ())
Und stellen Sie den Funktionsaufruf in die Warteschlange:
from my_module import count_words_at_url
job = queue . enqueue ( count_words_at_url , 'http://nvie.com' )
Ähnlich einfach ist auch die Planung von Aufträgen:
# 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 )
Das Wiederholen fehlgeschlagener Jobs wird ebenfalls unterstützt:
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 ]))
Ein vollständigeres Beispiel finden Sie in den Dokumenten. Aber das ist das Wesentliche.
Um mit der Ausführung von Funktionsaufrufen in der Warteschlange im Hintergrund zu beginnen, starten Sie einen Worker aus dem Verzeichnis Ihres Projekts:
$ 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
Das ist es auch schon.
Verwenden Sie einfach den folgenden Befehl, um die neueste veröffentlichte Version zu installieren:
pip install rq
Wenn Sie die modernste Version möchten (die möglicherweise kaputt ist), verwenden Sie Folgendes:
pip install git+https://github.com/rq/rq.git@master#egg=rq
Um die Dokumente zu erstellen und auszuführen, installieren Sie Jekyll und führen Sie Folgendes aus:
cd docs
jekyll serve
Wenn Sie RQ verwenden, sehen Sie sich die folgenden Repos an, die in Ihrem RQ-basierten Projekt nützlich sein könnten.
Dieses Projekt wurde von den guten Teilen von Celery, Resque und diesem Snippet inspiriert und wurde als leichte Alternative zum schweren Celery oder anderen AMQP-basierten Warteschlangenimplementierungen erstellt.