web-dev-qa-db-ja.com

スケジュールされたタスクをCeleryで実行することがcrontabよりも望ましいのはなぜですか?

Celeryが既にタスクキューを実行するスタックの一部であることを考慮します(つまり、cronを実行するためだけに追加されているわけではないため、やりすぎのようです)。

「定期的なタスク」機能は、crontabの代わりとしてどのように役立つのでしょうか。具体的には以下の点を探しています。

  • Crontabに関する主要な賛否両論
  • Crontabよりセロリの方が適しているユースケース
  • Django固有の使用例:実行するセロリvs crontab Django定期的なタスク、セロリがDjango-celeryとしてスタックに含まれている場合Djangoタスク。
42
DhruvPathak

私はプロダクションWebサイトにcronを使用しており、現在のプロジェクトでセロリに切り替えました。私はcronよりもセロリのほうがはるかに好きです。これが理由です。

  • Celery + Celerybeatはcronより細かい粒度を持っています。 Cronは1分に1回しか実行できませんが、セロリは実行できます(メッセージを送信するための電子メールキューをチェックするタスクと、オンラインユーザーリストをクリーンアップするタスクを90秒ごとに実行しています)。
  • Cron行は、絶対パスとユーザー情報を使用して、スクリプトまたは一意のコマンドを呼び出す必要があります。セロリはpython関数を呼び出します。コード以上のものを書く必要はありません。
  • セロリを使用すると、別のマシンにデプロイするには、通常、コードをプル/コピーする必要があります。これは通常、1か所にあります。 cronを使用してデプロイすると、さらに多くの作業が必要になります(自動化はできますが...)
  • 定期的なクリーニング(キャッシュ、データベース)、および一般的に短いタスクには、セロリの方がcronよりも適していると思います。ただし、あまりにも長いタスクでイベントキューが乱雑になりたくないので、データベースのダンプはcronにとってより手間のかかる作業です。
  • とりわけ、Celeryはマシン間で簡単に分散できます。
40
Steve K

セロリは、複数のマシン間でジョブを調整する必要があるときはいつでも示され、ワー​​クグループにマシンが追加またはドロップされてもジョブが実行されることを確認し、ジョブの有効期限を設定し、線形ではなくグラフスタイルでマルチステップジョブを定義します。依存関係フロー、または複数のオペレーティングシステムとバージョン間で同じように動作するスケジューリングロジックの単一のリポジトリを持つ。

3
Chris Johnson