問題タブ [celerybeat]
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.
celery - `djcelery_periodictask` テーブルを更新する際のデッドロック
私は夜間に実行される2つの単純な定期的なセロリタスクを持っていdjcelery_periodictask
ます。djcelery_periodictask
他のタスクがまだ共有ロックを保持している間に、あるタスクが更新を試みているようです。
ほんの数行を含むテーブルでの 2 つの単純な更新がデッドロックになるのはどうしてでしょうか?
django - 実稼働環境 (debian サーバー) でセロリ (およびセロリ ビート) を実行するための最適な「アーキテクチャ」は何ですか?
Debianサーバーでホストされているdjangoプロジェクトがセロリとセロリビートを使用できるように、最適な「アーキテクチャ」を見つけようとしています。彼は私の要件です:
- セロリ ワーカーとセロリ ビートは、サーバーの再起動後に自動的に実行できるようになります。
- 標準の Debian パッケージを使用することをお勧めします。
- グローバルにインストールする必要がないものは、プロジェクトの virtualenv にインストールする必要があります。
- django プロジェクトの所有者である Linux ユーザーは、プロジェクトを展開するために sudo 権限を必要としません。
これらの要件に基づいて、次の結論に達しました。
- ワーカーとビートのデーモン化には、supervisord を使用するとよいでしょう。Supervisord は標準の debian パッケージに含まれており、この方法でインストールすると、サーバーの再起動後に Supervisord が実行されます (これが、すべてのプロジェクトで virtualenv にローカルにインストールしたくない主な理由です)
- Celeryは、 virtualenvのすべてのプロジェクトに対してローカルにインストールできます。
このような状況下で、新しいプロジェクトを展開するときに、新しい Linux ユーザーを作成し、ルートとして実行している apache virtualhost などをセットアップするときに、supervisord の新しい構成ファイルも追加します。次に、ファブリックを使用してプロジェクトの新しいバージョンをデプロイするとき、プロジェクトユーザーの下でのみ作業します。
このソリューションの唯一の未解決の問題 (私が今まで見つけた) は、セロリ ビートのスケジュール構成が django の設定に記述されているが、リロードされるまでビート デーモンが構成の変更を認識できないことです。ただし、プロジェクト ユーザーはリロードできません。
私の質問は、この問題をどのように解決すべきか、または他のどのアーキテクチャをお勧めしますか? ありがとうございました。
python-2.7 - セロリで2つのタスクを相互に排他的にするには?
Celery で 2 つの異なるタスクを同時に実行できないようにする方法はありますか? 同時実行レベル=1 で新しいキューを定義し、それらのタスクをそのキューに送信することを考えていましたが、例が見つかりませんでした。それは可能ですか?
ありがとう!
django - 1日のランダムな時間間隔での定期的なタスク セロリ ジャンゴ
1 日の午前 10 時、午後 1 時、午前 12 時にソースからいくつかのファイルをダウンロードする必要があり、ダウンロードが完了したら、それらをデータベースに送信する必要があります。これを毎日やりたい。「定期的なタスクのコード」のスペースには何を書くべきですか。また、他に間違いがあれば教えてください。前もって感謝します。
python - セロリビートスケジュール:セロリビートを開始するとすぐにタスクを実行しますか?
を使用してセロリ ビート スケジュールを作成するtimedelta(days=1)
と、最初のタスクは 24 時間後に実行されます。セロリ ビートのドキュメントを引用します。
スケジュールに timedelta を使用すると、タスクが 30 秒間隔で送信されます (最初のタスクは、セロリ ビートが開始されてから 30 秒後に送信され、最後に実行されてから 30 秒ごとに送信されます)。
しかし、実際には、多くの状況で、スケジューラが起動時にタスクを実行することが実際に重要です。しかし、セロリの開始直後にタスクを実行できるオプションが見つかりませんでした。注意深く読んでいないのでしょうか。セロリにはこの機能がありませんか?
celery - メッセージ バスにパブリッシュする前にセロリ ビート タスクをインターセプトして停止する
シグナルを使用して、公開前にセロリ ビート タスクをインターセプトしています。これはうまくいきます。しかし、さらに、いくつかのロジックを実行し、結果に基づいてタスクをキャンセルしたいと考えています。
例外を発生させる以外に、イベント ハンドラーからタスクをキャンセルする方法を見つけることができず、それは非常に洗練されていないようです。
背景は、キャッシュ ロックを使用して分散タスク処理を実装しており、公開前にロックに対して CAS 操作を実行していることです。
現在のセロリ/セロリビート機能を使用してこれを実装する方法はありますか?
ありがとう