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, ознакомьтесь с приведенными ниже репозиториями, которые могут быть полезны в вашем проекте на основе rq.
Этот проект был вдохновлен хорошими частями Celery, Resque и этим фрагментом и был создан как облегченная альтернатива тяжеловесному Celery или другим реализациям организации очередей на основе AMQP.