問題タブ [python-rq]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Django で django-rq ( python-rq ) をテストするベスト プラクティス
プロジェクトで django-rq の使用を開始します。
Redis ベースの Python キューイング ライブラリである RQ との Django の統合。
RQ を使用している django アプリをテストするベスト プラクティスは何ですか?
たとえば、アプリをブラック ボックスとしてテストする場合、ユーザーがいくつかのアクションを実行した後、現在のキューですべてのジョブを実行し、DB ですべての結果を確認します。私のdjango-testsでそれを行うにはどうすればよいですか?
python - セロリとRQを使用することの長所と短所
現在、私はいくつかのバックグラウンドジョブを実装する必要があるPythonプロジェクトに取り組んでいます(主に電子メールの送信とデータベースの大幅な更新のため)。タスクブローカーにはRedisを使用しています。したがって、この時点で、 CeleryとRQの2つの候補があります。私はこれらのジョブキューについてある程度の経験がありましたが、このツールの使用経験を皆さんに共有していただきたいと思います。それで。
- セロリとRQを使用することの長所と短所。
- CeleryとRQの使用に適したプロジェクト/タスクの例。
セロリはかなり複雑に見えますが、フル機能のソリューションです。実際、これらすべての機能が必要だとは思いません。反対側から見ると、RQは非常に単純です(構成、統合など)が、いくつかの便利な機能(タスクの取り消し、コードの自動再読み込みなど)が不足しているようです。
python - redis redis.client rq Queue job.result # => なし
redisでrqキューイングを理解しようとしています。キューで使用したい単純な test_job 関数があります。
そして、主に rq ドキュメントから取られたスクリプト:
問題は、while ループを離れないことです。job.result は None のままです。ただし、ログによると、redis 接続は機能しているようです。
python - Python-RQ でマシン上のワーカー数を減らしますか?
Python-RQでマシン上のワーカー数を減らす良い方法は何ですか?
ドキュメントによると、マシン上のワーカー プロセスの 1 つに SIGINT または SIGTERM コマンドを送信する必要があります。
労働者を降ろす
SIGINT
ワーカーが( 経由でCtrl+C) またはSIGTERM
( 経由で )受信した場合、ワーカーkill
は現在実行中のタスクが終了するまで待機し、ワーク ループを停止して、自身の終了を適切に登録します。このテイクダウン フェーズ中に、
SIGINT
またはSIGTERM
が再度受信された場合、ワーカーは強制的に子プロセスを終了します (送信しますSIGKILL
) が、それでも自身の終了を登録しようとします。
これは、多くのコーディング オーバーヘッドを意味しているようです。
- ワーカー プロセスの PID を追跡する必要がある
- リモート マシンから SIGINT コマンドを送信する方法が必要
これをカスタムビルドする必要がありますか、それとも Python-RQ ライブラリまたは他の既存のライブラリを使用してこれを簡単に行う方法はありますか?
python - Python RQ での不十分なジョブ プッシュ パフォーマンス
Web アプリケーションのバックエンドをサポートするために使用しようとしてpython-rq
いますが、新しいジョブのプッシュには非常に時間がかかります (最大 12 秒)。
enqueue_call
特にシステムに接続されているワーカー プロセスの数が増加した場合 (200 以上) 、関数呼び出しの実行時にパフォーマンス ヒットが発生します。
システムは次のように機能します。
- フロントエンドはジョブをタスク キュー サーバーにプッシュします。これは、
enqueue_call
関数を使用して、実行される関数への実際の引数に加えて、引数 (timeout や ttl など) をジョブに渡します。 - 複数のプロセス (複数のマシンに分散) がそれぞれ UNIX の下でワーカーを実行しています
screen
。ワーカーはドキュメントで提供されているパターンに従い、Worker.work()
無限ループ関数を実行してキューをリッスンします。 - 処理中、一部のタスクは、通常、実行中の同じキューで新しいタスクを生成します。
インフラストラクチャについて:
- このタスク キューを実行する Redis サーバーは専用です。また、永続性は無効になっています。4 GB の Rackspace サーバーで実行されています。
- タスク キューを使用してサーバーで実行
redis-benchmark
すると、ほとんどのベンチマークで平均 20000 r/s を超える結果が得られます。
このような状況で、新しいジョブのプッシュ パフォーマンスを改善するにはどうすればよいでしょうか? 使用すべきより良いパターンはありますか?
django - Django python-rq -- DatabaseError SSL エラー: 復号化に失敗したか、不正なレコード mac
私は django-redis および django_rq フレームワークを使用して、Heroku 上の Django アプリケーションの redis キャッシュと redis バックグラウンド タスク処理の両方をサポートしています。以前はスムーズに機能していましたが、今DatabaseError SSL error: decryption failed or bad record mac
ではジョブの 1 つが実行されるたびにエラーが発生します。
このエラーは、 https://devcenter.heroku.com/articles/postgres-logs-errorsの記事で Postgres で一般的に発生することを読みましたが、Python のセットアップに役立つものは何もありませんでした。
django - キューからDjango RQジョブをクリアするには?
質問するのは少しばかげていますが、 RQのドキュメントにはないようです。何千ものアイテムを含む「失敗した」キューがあり、Django 管理インターフェイスを使用してクリアしたいと考えています。管理インターフェイスはそれらをリストし、それらを個別に削除して再キューに入れることができますが、一括で行うためにdjangoシェルに飛び込む必要があるとは信じられません.
私は何を逃したのですか?