[解決済み] 分散タスクキュー(Celeryなど)とcrontabスクリプトの比較
質問
分散タスクキュー」の目的がよくわからず困っています。例えば、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にはありません。
関連
-
[解決済み] Celery 登録されていないタイプのタスクを受信した(実行例)
-
[解決済み] を付けるべきでしょうか?(shebang)を付けるべきか、またどのような形で付けるべきか?
-
[解決済み] Pythonです。未束縛のメソッドを束縛する?
-
[解決済み] なぜ(0-6)は-6=偽なのか?重複
-
[解決済み] SQLAlchemy - テーブルのリストを取得する
-
[解決済み] subprocess.run()の出力を抑制またはキャプチャするには?
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] Pythonでファイルの読み込みと上書きをする
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?
-
[解決済み] Celeryで実行中のタスクをキャンセルするには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] なぜ(0-6)は-6=偽なのか?重複
-
[解決済み] ファブリック経由でデプロイユーザとしてvirtualenvを有効化する
-
[解決済み] 値で列挙名を取得する [重複]。
-
[解決済み] 古いバージョンのPythonにおける辞書のキーの並び順
-
[解決済み] Flask でグローバル変数はスレッドセーフか?リクエスト間でデータを共有するには?
-
[解決済み] CSVデータを処理する際、1行目のデータを無視する方法を教えてください。
-
[解決済み] PySparkでデータフレームのカラムをString型からDouble型に変更する方法は?
-
[解決済み] pycharmがタブをスペースに自動変換する
-
[解決済み] Pythonでランダムなファイル名を生成する最良の方法