問題タブ [kombu]
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 - セロリ、昆布、PyAMQP、RabbitMQ/ironMQ を区別する
画像を S3 サーバーにアップロードしたいのですが、アップロードする前に 3 つの異なるサイズのサムネイルを生成したいので、要求/応答サイクルから外して実行したいので、セロリを使用しています。私はドキュメントを読みました。これが私が理解したことです。間違っている場合は修正してください。
- Celery は、リクエスト応答サイクル以外でタスク キューを管理するのに役立ちます。
- 次に、cart/kombu と呼ばれるものがあります。これは、セロリを介して作成されるタスクをパッケージ化する django ミドルウェアです。
- 次に、ブローカーへのニンジンの通信を容易にする第 3 層の PyAMQP。例えば。RabbitMQ、AmazonSQS、ironMQ など
- ブローカーは別のサーバーにあり、あなたのために何かをします.
現在、私の理解では、複数のユーザーが同時に画像をアップロードすると、セロリはサイズ変更をキューに入れ、heroku でクールなアドオンを提供するため、サイズ変更は実際には ironMQ サーバーで行われます。
今疑問:
しかし、画像のサイズが変更された後、ironMQ はそれを S3 サーバーにプッシュしますか、それともプロセスが完了すると通知しますか..私はそれについて明確ではありません。
セロリと昆布・人参の違いをわかりやすく教えてください。
redis - Celery が Redis ブローカーに接続していません: ブローカーへの接続が失われました
Django にインストールした Celery 3.0.19 のブローカーとして Redis を機能させようとしています。redis-server がポート 6379 で実行されていることがわかります。単純な Celery テストを実行すると、次のスタック トレースが得られます。
django - Django セロリ、昆布輸送、および複数のワーカー
Celery の Django ORM トランスポートのドキュメントには、複数のワーカーを使用すると、一部のタスクが複数回実行される可能性があると記載されています。
http://docs.celeryproject.org/en/latest/getting-started/brokers/django.html
「複数」の意味を定量化できる人はいますか? 具体的に言えば、サーバーが 2 つあり、セロリ ワーカーを 2 つ実行したいと考えています。2 つのワーカーを使用すると、一部のタスクが複数回実行されるリスクにさらされるかどうか、誰かに教えてもらえないかと思っています。
python - Kombu で AMQP correlationId を指定するにはどうすればよいですか?
ドキュメントpublish
は、AMQP 仕様に従って追加のAMQP プロパティがキーワード引数として as に渡されることを示唆しcorrelationId="foo"
ていますが、望ましい効果はないようです。
python - Kombu-python - ブロック/同期動作を強制する (または、前の処理が終了したときにのみメッセージを処理する)
Kombuでrabbitmqキューを処理し、django関数/管理コマンドなどを呼び出しています。私の問題は、正しい実行順序が絶対に必要なことです。メッセージ 3 のハンドラは、メッセージ 1 と 2 のハンドラが終了するまで実行できません。前のメッセージの処理を完了する前に、Kombu が別のメッセージを処理しないようにする必要があります。
この基本クラスを検討してください
この種の行動のために昆布を強制する方法はありますか? ロックが処理が完了するまで別のイベントを排出しないかprocess_message
、前のイベントが完了するまで別のイベントを実行しないか、またはこれを達成するための他の方法であるかどうかは気にしません。実行順序が厳密に維持されていることを確認する必要があるだけです。
これについて何かお役に立てば幸いです。
python - ホストではなく複数のタスクへの Celery ルーティング
Golang (redis を使用) から書いたアプリケーションを Python に移植する作業を行っています。Celery を使用してタスクのキューイングを実行したいと思っていますが、ルーティングに関して質問があります...
私のアプリケーションは、REST POST を介して「イベント」を受け取ります。各「イベント」は異なるタイプにすることができます。次に、バックグラウンドでワーカーに特定のタイプのイベントを待機させたいと考えています。ここでの注意点は、1 つのイベントが、そのイベントを処理する複数のタスクになる可能性があることです。例えば:
some/lib/a/tasks.py
some/lib/b/tasks.py
要約すると... N 個のワーカーを (X 個のマシンで) 実行できるようにしたいのですが、これらの各作業には、a.handle_event_typeA、b.handle_event_typeA などのように Y 個のタスクが登録されます。 . タスクをキューに挿入し、1 つのワーカーにそのタスクをピックアップさせ、ワーカー内の複数のタスク (つまり、a.handle_event_typeA と b.handle_event_typeA の両方) にルーティングできるようにしたいと考えています。
ここの昆布のドキュメントとここのセロリのルーティングのドキュメントを読みましたが、これを正しく構成する方法がわかりません。
私は以前から、従来のワークフローに Celery を使用してきましたが、その機能セット、パフォーマンス、および安定性に非常に満足しています。Kombuを直接使用するか、自作ソリューションを使用して必要なものを実装しますが、可能であればCeleryを使用したいと思います.
みんなありがとう!この質問で誰かの時間を無駄にしないことを願っています。
編集 1
この問題についてもう少し考えた後、Celery で必要なものを実装するための回避策を考え出しました。これは最も洗練されたソリューションではありませんが、うまく機能しています。私はdjangoを使用しており、キャッシュの抽象化です(代わりにmemcachedやredisなどを直接使用できます)。これが私が思いついたスニペットです:
次に、次のようにして、さまざまなモジュールのタスクをサブスクライブします。
次に、REST イベントを処理するときにパブリッシュ タスク メソッドを呼び出すことができます。