RQ ( Redis Queue ) est une simple bibliothèque Python permettant de mettre en file d'attente les tâches et de les traiter en arrière-plan avec les travailleurs. Il est soutenu par Redis et est conçu pour avoir une faible barrière à l’entrée. Il devrait être facilement intégré à votre pile Web.
RQ nécessite Redis >= 3.0.0.
La documentation complète peut être trouvée ici.
Si vous trouvez RQ utile, pensez à soutenir ce projet via Tidelift.
Tout d’abord, exécutez un serveur Redis, bien sûr :
$ redis-server
Pour mettre des tâches dans des files d'attente, vous n'avez rien à faire de spécial, définissez simplement votre fonction généralement longue ou bloquante :
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 ())
Ensuite, créez une file d'attente RQ :
from redis import Redis
from rq import Queue
queue = Queue ( connection = Redis ())
Et mettez en file d'attente l'appel de fonction :
from my_module import count_words_at_url
job = queue . enqueue ( count_words_at_url , 'http://nvie.com' )
La planification des tâches est également simple :
# 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 )
La nouvelle tentative de tâches ayant échoué est également prise en charge :
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 ]))
Pour un exemple plus complet, reportez-vous à la documentation. Mais c'est l'essentiel.
Pour commencer à exécuter les appels de fonction mis en file d'attente en arrière-plan, démarrez un travailleur à partir du répertoire de votre projet :
$ 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
C'est à peu près tout.
Utilisez simplement la commande suivante pour installer la dernière version publiée :
pip install rq
Si vous voulez la version de pointe (qui pourrait bien être cassée), utilisez ceci :
pip install git+https://github.com/rq/rq.git@master#egg=rq
Pour créer et exécuter la documentation, installez jekyll et exécutez :
cd docs
jekyll serve
Si vous utilisez RQ, consultez ces dépôts ci-dessous qui pourraient être utiles dans votre projet basé sur rq.
Ce projet a été inspiré par les bonnes parties de Celery, Resque et cet extrait, et a été créé comme une alternative légère à la lourdeur de Celery ou d'autres implémentations de file d'attente basées sur AMQP.