問題タブ [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.

0 投票する
1 に答える
49 参照

django - 起動のスケジュールが機能しない

Celery をセットアップしてスケジューリングを使用したい場合、両方の init スクリプトを以下に追加するか、またはcelerybeatのみを追加しますか?

https://github.com/ask/celery/blob/master/contrib/generic-init.d/celeryd

https://raw.github.com/ask/celery/master/contrib/generic-init.d/celerybeat

問題は、両方のスクリプトがあり、Celery がビート モードで実行されず、スケジューリングが機能しないことです (通常のタスクは機能しますか?)

0 投票する
1 に答える
1982 参照

python - Python でのタイマーの実装

総括

  • 私は中規模のdjangoプロジェクトを持っています
  • (DB とは対照的に) メモリ内に多数のプレフィックス ツリーがあります。
  • これらのツリーのノードは、タイムアウトの対象となるエンティティ/オブジェクトを表します。つまり、さまざまな時点でこれらのノードをタイムアウトにする必要があります

デザイン:

  • 基本的に、リセット可能なワンショット タイマーを起動し、関連付けて、タイマーを作成するエンティティ (この場合はツリーのノード) に対して何らかの操作を実行できるコールバックを提供できるようにするタイマー コンストラクトが必要でした。

さまざまなオプションを調べた後、ネイティブに使用できるものは見つかりませんでした (django アプリなど)。Python の Timer オブジェクトは、スケーリング/実行されないため、これには適していません。したがって、以下に基づいて独自のタイマーを作成することにしました。

  1. タイム ホライズンを保持するタイム デルタ オブジェクトのソートされたリスト
  2. 「ダニ」をトリガーするメカニズム

実装の選択肢:

  1. ソートされたデルタ リストの Bisect のラッパーを使用しました: http://code.activestate.com/recipes/577197-sortedcollection/
  2. 目盛りを提供するためにセロリを使用しました-1分の粒度で、ワーカーはタイマークラスによって提供される timer_tick 関数をトリガーします。timer_tick は基本的に、ソートされたリストを通過し、ティックごとにヘッド ノードをデクリメントする必要があります。次に、いずれかのノードが 0 になった場合、コールバックを開始し、ソート済みタイマー リストからそれらのノードを削除します。
  3. タイマーを作成するには、オブジェクトの ID を返す Timer オブジェクトをインスタンス化する必要があります。この ID は db に格納され、タイマーを作成するエンティティを表す DB のエントリに関連付けられます

追加のデータ構造: Timer インスタンス (タイマーの作成ごとにインスタンス化される) を追跡するために、id を obj にマップする WeakRef ディクショナリがあります。

したがって、基本的に、メインの Django プロジェクトのメモリには 2 つのデータ構造があります。

問題文:

セロリ ワーカーはタイマー リストを調べ、id2obj マップを潜在的に変更する必要があるため、セロリ ワーカーとメインの間で状態を共有する方法を見つける必要があるようです。

SO/Google を調べたところ、次の提案が見つかりました

  1. マネジャー
  2. 共有メモリ

残念ながら、bisect ラッパーは、ピクルス化や状態共有にはあまり適していません。辞書を作成し、並べ替えられたリストを辞書内に埋め込もうとすることで、マネージャーのアプローチを試みました..エラーが発生しました(並べ替えられたリストによって保持されているメモリは共有されておらず、" shared" メモリ オブジェクトは機能しません)

最後に...質問:

  1. SortedCollection と Weakref Dict をワーカー スレッドと共有する方法はありますか

代替ソリューション:

ワーカースレッドをシンプルに保つのはどうですか...ティックごとにDBに書き込み、ポストDbシグナルを使用してメインで通知を受け取り、メインで期限切れのタイマーの処理を実行します。もちろん、短所は、並列化が失われることです。

0 投票する
2 に答える
15850 参照

python - Celerybeat が定期的なタスクを実行していない

manage.py celerybeatタスクを実行しない理由をどのように診断しますか?

次のコマンドを使用して、supervisord を介して celerybeat を実行しています。

Supervisord は celerybeat を正常に実行しているように見え、ログ ファイルには次のように表示されます。

http://localhost:8000/admin/djcelery/periodictask数分ごとに実行する必要があるいくつかの定期的なタスクが有効になっていることが示されています。ただし、celerybeat のログには、実行中のものが表示されることはありません。これはなぜでしょうか?

0 投票する
1 に答える
1686 参照

python - celeryd および celerybeat - 「タイプの未登録のタスクを受け取りました...」

OKみんな、これは私を狂わせています。私はこれに丸一日取り組んでいますが、うまくいきません!
私のセロリプロジェクトの構造は次のとおりです。

と:

と:

すべてのファイルはprojects/scheduler/フォルダーの下にあります。
サービスを開始すると、celerydサービスが実行されてブローカーに接続されていることcelerybeatがわかりますが、サービスを開始すると、ログに次のメッセージが表示されますReceived unregistered task of type 'tasks.test'
定数のコメントを外すとCELERY_IMPORTS(SOの多くの回答で示唆されているように)、celerydサービスは開始されません! 実際には出力されますOKが、ps ef | grep celery実行していないことがわかります。

私のデーモン conf ファイルは次のようになります。

どんな助けでも大歓迎です。

0 投票する
1 に答える
10378 参照

celery - セロリビートが正しく動作しない

セロリビートでこのコマンドを実行すると。

[2013-06-27 02:17:05,936: INFO/MainProcess] Celerybeat: 開始しています...

[2013-06-27 02:17:05,937: INFO/MainProcess] エントリを書き込んでいます...

[2013-06-27 02:17:08,711: INFO/MainProcess] DatabaseScheduler: スケジュールが変更されました。

[2013-06-27 02:17:08,712: INFO/MainProcess] エントリを書き込んでいます...

この結果に固執しています。私のsettings.pyでは、CELERYBEAT_SCHEDULEを設定しました。

私のセロリビートの何が問題になっていますか?

0 投票する
3 に答える
3800 参照

django - Django Celery manage.py コマンドのスケジューリング

次のコマンドを使用して、スケジュールに従って solr インデックスを更新する必要があります。

Celery docs を調べて、スケジューリングに関する情報を見つけましたが、スケジュールおよび virtualenv 内で django 管理コマンドを実行する方法を見つけることができませんでした。これは通常のcronで実行した方がよいでしょうか? もしそうなら、どのようにvirtualenv内で実行しますか? 誰でもこれを経験したことがありますか?

助けてくれてありがとう!

0 投票する
4 に答える
8349 参照

python - スーパーバイザーと virtualenv による celerybeat の監視

私のcelerybeat.conf

スーパーバイザーを起動すると、次のエラーが表示されます。

これを解決する方法はありますか?