問題タブ [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-rq enqueue のパラメーターとして必須ではない組み込みオブジェクトを渡す方法
更新: でクラスを渡すことさえできないことがわかりましたenqueue
。これを行うことは可能ですか?
item
でオブジェクト (Django のモデル) をパラメーターとして渡したいのですqueue.enqueue(grabber.parse_body, item)
が、rqworker
この例外が発生します (使用するかどうかにかかわらず、アイテムをパラメーターとして渡そうとすると):
ファイル "/usr/local/lib/python3.4/dist-packages/rq/job.py"、53 行目、unpickle で UnpickleError('Could not unpickle.', pickled_string, e) rq.exceptions.UnpickleError: ( 'Could unpickle.', ImproperlyConfigured('INSTALLED_APPS の設定を要求しましたが、設定が構成されていません。設定にアクセスする前に、環境変数 DJANGO_SETTINGS_MODULE を定義するか、settings.configure() を呼び出す必要があります。',))
それparse_body
が何であるかわからないようitem
ですか?
アイテムの id をパラメーターとして渡してから、 で id を処理できることはわかっていますが、これをで直接parse_body
使用することは可能ですか?item
parse_body
私のメインコード: (enqueue.py
とgrabber.py
は独立したスクリプトであり、Django アプリではありません。)
enqueue.py
グラバー.py
python - Flask を使用して RedisCloud で Heroku に RQ ワーカーをセットアップする方法
フラスコアプリ用にherokuでpython rqワーカーを作成しようとしています。heroku のドキュメントには、ワーカーを作成するための次のサンプル コードが記載されています。
https://devcenter.heroku.com/articles/python-rq#create-a-worker
問題: RedisCloud を使用していますが、 REDISTOGO_URL を REDISCLOUD_URL に置き換えても機能しません。ローカルでの読み込みは問題ありませんが、heroku にアップロードすると、ログにまだ localhost に接続しようとしていることが表示されます。
RedisCloudのドキュメントには、特にフラスコではなく、Python での作業のみがリストされているため、以下のコードは私の状況をまったく変更しませんでした:
REDISCLOUD_URL 変数が heroku に存在することを確認しました:
形式:
redis.from_url() 関数が何をするのか、またはそれが受け入れるパラメータについてのドキュメントは見つかりません。
このワーカーが localhost ではなく heroku のサーバー var を参照するようにするには、ここで何が欠けていますか?
python - ジョブに応じて結果を渡す - python rq
ジョブの結果をそれに依存するジョブに渡すにはどうすればよいですか?
私が現在行っているのは、最初のジョブの ID を 2 番目のジョブに渡すことです。
secondJob
そして、最初のジョブを取得して結果を取得する内部
これは推奨される方法ですか?最初のジョブの結果を2番目に直接渡すために使用できる他のパターンはありますか?
javascript - JavaScript を使用した Python RQ キューイング
JavaScript を使用して Python RQ のタスクをキューに入れようとしています。そのために、RQ が Redis で何をするかを監視しました。特に、入力引数などを含む、実行するタスクを見つける場所を示すピクル リストを格納します。ここでは、RQ のホームページにある例を使用しています。次の文字列 (pickled リスト) を格納する場合:
JavaScript では、リテラル\x80
と\x85
. \xc2\x80
それらをandに置き換えますが、\xc2\x85
この動作を停止する理由と方法を理解できません。残りの文字列は、期待どおり Redis に送られます。追加のリテラルは、rqworker、具体的には pickle が正しく機能するのを妨げます。
node と node_redis を使用しています。
python - Supervisord との RQ 同時実行性は?
すべて、私は、RQ ワーカーが Supervisord を使用して同時に実行するように「強制」しようとしています。rq-dashboard には 3 つのワーカー、3 つの PID、および 3 つのキュー (ワーカー/PID ごとに 1 つ) が表示されているため、私のセットアップ Supervisord セットアップは正常に機能しているようです。スーパーバイザーのセットアップは次のとおりです (ワーカー 1 のセットアップのみを示し、この下にさらに 2 つのワーカーが定義されています)。
問題は、3 つのジョブを同時に送信すると、実行にかかる合計時間が 1 つのタスクの 3 倍になることです (つまり、合計時間はタスクの数に比例し、これは x4、x5 などにスケーリングされます)。同時実行は利用できないようです。また、新しいジョブを最小限の開始済みジョブとキュー済みジョブでキューに送信することで、基本的な負荷分散を実装しました。これは正常に機能します (ジョブはキュー間で均等に分散されていることが観察されます)。
この設定で同時実行が許可されないのはなぜですか?
不足しているセットアップに関する考慮事項はありますか?
PY3 に移行し、gevent 自体は PY3 ではまだサポートされていないため、rq-gevent-worker パッケージ (以前は同時実行/RQ でうまく機能していた) は使用できなくなったことに注意してください。しかし、これにより、同時実行が可能であるという手がかりが得られます。
python - セロリの進行中のタスクと対話する
と に基づく分散アーキテクチャがrabbitMQ
ありCelery
ます。問題なく複数のタスクを並行して起動できます。スケーラビリティは良好です。
ここで、タスクをリモートで制御する必要があります: PAUSE、RESUME、CANCEL。私たちが見つけた唯一の解決策は、Celery タスクで、DB 要求の後にコマンドに応答する別のタスクへの RPC 呼び出しを作成することです。Celery タスクと RPC タスクは同じマシン上になく、RPC タスクのみが DB にアクセスできます。
それを改善し、進行中のタスクと簡単にコミュニケーションをとる方法について何かアドバイスはありますか? ありがとうございました
編集:
実際には、下の図のようなことをしたいと考えています。Blue
構成またはを行うのは簡単ですが、Orange
両方を同時に行う方法はわかりません。
ワーカーはコモンにサブスクライブしており、各ワーカーは交換で
Jobs queue
独自に宣言されています。Admin queue
編集:
でこれが不可能な場合はCelery
、python-rq
.