RQ ( Redis Queue ) es una biblioteca Python simple para poner trabajos en cola y procesarlos en segundo plano con los trabajadores. Está respaldado por Redis y está diseñado para tener una barrera de entrada baja. Debería integrarse fácilmente en su pila web.
RQ requiere Redis >= 3.0.0.
La documentación completa se puede encontrar aquí.
Si encuentra útil RQ, considere apoyar este proyecto a través de Tidelift.
Primero, ejecute un servidor Redis, por supuesto:
$ redis-server
Para poner trabajos en colas, no tiene que hacer nada especial, simplemente defina su función típicamente larga o de bloqueo:
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 ())
Luego, cree una cola RQ:
from redis import Redis
from rq import Queue
queue = Queue ( connection = Redis ())
Y ponga en cola la llamada a la función:
from my_module import count_words_at_url
job = queue . enqueue ( count_words_at_url , 'http://nvie.com' )
Programar trabajos también es igualmente sencillo:
# 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 )
También se admite el reintento de trabajos fallidos:
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 ]))
Para obtener un ejemplo más completo, consulte los documentos. Pero esta es la esencia.
Para comenzar a ejecutar llamadas a funciones en cola en segundo plano, inicie un trabajador desde el directorio de su proyecto:
$ 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
Eso es todo.
Simplemente use el siguiente comando para instalar la última versión lanzada:
pip install rq
Si quieres la versión más moderna (que bien puede estar rota), usa esto:
pip install git+https://github.com/rq/rq.git@master#egg=rq
Para compilar y ejecutar los documentos, instale jekyll y ejecute:
cd docs
jekyll serve
Si usa RQ, consulte los repositorios a continuación que podrían ser útiles en su proyecto basado en RQ.
Este proyecto se inspiró en las partes buenas de Celery, Resque y este fragmento, y se creó como una alternativa liviana al peso de Celery u otras implementaciones de colas basadas en AMQP.