RQ ( Redis Queue ) は、ジョブをキューに入れ、ワーカーを使用してバックグラウンドで処理するためのシンプルな Python ライブラリです。 Redis によってサポートされており、参入障壁が低くなるように設計されています。 Web スタックに簡単に統合できるはずです。
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 ベースのキュー実装の重さに代わる軽量の代替手段として作成されました。