1

私の django Web アプリケーション ロジックは、バックグラウンド タスクの実行 (定期的とスタンドアロンの両方、同期と非同期の両方) に重点を置いています。すべての調査は、Celery の使用が最も推奨されるアプローチであることを示しているようです。最終的には Heroku にデプロイする予定ですが、Celery + Redis (ローカル開発に使用しているもの) がサポートされているという事実は、私にとって大きなプラスです。

ただし、セロリが提供するよりも広範なスケジューリング機能が必要です。「月の最後の太陽に実行」などのスケジュールを実行できるようにするには、定期的なタスクが必要です。そのため、django に独自のモデルを実装して、繰り返しルールとその他の必要なパラメーターを保存しました。

今、テーブルをセロリとインターフェースする方法に困惑しています。理想的には、私がやりたいことは、スケジュール、期限になったときに実行するタスク、およびタスクのパラメーターを持つ独自のジョブ モデルを持つことです。C++ の関数 ptr のようなものです。次に、ジョブが期限になったジョブキューをチェックし続けるデーモンを実行します。定期的に次のジョブインスタンスを作成してキューにプッシュし、セロリの遅延メソッドなどを使用してパラメーターを使用して関連タスクを実行します。

質問:

  1. このアプローチは理にかなっていますか?
  2. そうでない場合、他のどの代替アプローチを使用できますか
  3. はいの場合、そのジョブ/イベント キューを設計するにはどうすればよいですか...

これを行うためのより良いアプローチ、または適切なジョブキューの既存の実装があるか、セロリのジョブキュー自体を使用する方法があるかどうかを聞きたいです...

ありがとう山..

4

1 に答える 1

0

Celery の定期的なタスクは、ほぼこのように機能します。celery beat期限が来たらタスクを送信する専用のスケジューラ プロセス ( ) があります。

beatクラスをサブクラス化することで、使用する新しいスケジューラを作成することもできます。サブクラス化することで、(既に組み込まれているスケジュールcelery.beat.Schedulerのように) カスタム スケジュールも作成できます。crontabcelery.schedules.schedule

django-celery エクステンション ( djcelery.schedulers.DatabaseScheduler) には、データベースを利用したスケジューラーの実装があり、データベースの頻繁なポーリングなどを回避するために多くのトリックを使用しています (残念ながら、十分にコメントされていません)。

スケジューラ: https://github.com/celery/celery/tree/master/celery/beat.py スケジュール: https://github.com/celery/celery/tree/master/celery/schedules.py データベーススケジューラ: https: //github.com/celery/django-celery/tree/master/djcelery/schedulers.py

于 2012-12-06T16:05:05.050 に答える