1. ホーム
  2. python

[解決済み] 分散タスクキュー(Celeryなど)とcrontabスクリプトの比較

2022-11-27 10:48:44

質問

分散タスクキュー」の目的がよくわからず困っています。例えば、pythonの セロリライブラリ .

私は、pythonフレームワークであるceleryで、関数を実行するための時間指定ウィンドウを設定できることを知っています。しかし、それはまた、Pythonスクリプトに向けられたlinuxのcrontabで簡単に行うことができます。

そして、私の知る限り、そして私自身の django-celery webapps から示す限り、celery は生の crontab を設定するよりもずっと多くの RAM メモリを消費します。比較的小さなアプリで数百MBの差があります。

この違いについて、誰か私を助けてくれませんか?おそらく、タスクキュー/クーロンタブが一般的にどのように動作するかの高レベルの説明もあればいいと思います。

ありがとうございます。

どのように解決するのですか?

タスクに何をさせたいのか、分散させる必要があるのか、どのように管理したいのかによって異なります。

クーロンタブは、N間隔でスクリプトを実行することができます。それは実行され、そして戻ります。基本的に、各インターバルで 1 回の実行を得ることができます。django の管理コマンドを実行するように crontab を指示すれば、django の環境全体にアクセスすることができるので、celery はそこではあまり役に立ちません。

メッセージキューの助けを借りて、celery がもたらすものは、分散タスクです。多くのサーバがワーカーのプールに参加し、それぞれが二重処理の心配なしにワークアイテムを受け取ることができます。また、タスクの準備ができ次第、すぐに実行することも可能です。cronでは、最低1分という制限があります。

例として、新しいウェブアプリケーションを立ち上げたばかりで、各ユーザーにメールを送信する必要がある何百ものサインアップを受け取ったとします。電子メールの送信には長い時間 (比較的) がかかるため、タスクによってアクティベーションの電子メールを処理することにしました。

cron を使用していた場合、送信する必要があるすべての電子メールを毎分 cron が処理できることを確認する必要があります。複数のサーバーがある場合、同じユーザーに複数のアクティベーション メールが送信されないようにする必要があります - ある種の同期が必要です。

celeryでは、タスクをキューに追加します。サーバごとに複数のワーカーを持っていて、cronjobより先にスケールアップしていることもあるでしょう。また、複数のサーバーを持つことで、さらにスケールアップすることも可能です。同期はキューの一部として処理されます。

あなたは できる はcronの代わりとして使うことができますが、それは本当のところ主要な用途ではありません。celeryは、分散したクラスタ間で非同期タスクを実行するために使用されます。

そしてもちろん、celeryは 機能の大きなリスト があり、cronにはありません。