0

私はCeleryとDjangoを使用してタスクキューを管理し、1つ(または複数)の小さな(シングルコア)EC2インスタンスを使用してタスクを処理しています。

いくつかの考慮事項があります。

  • 私のタスクは、シングルコアで100%のCPUを消費します。-使用可能なCPUを使用しますが、1つのコアのみを使用します
  • 同じコアで2つのタスクが進行中の場合、各タスクの速度は半分になります。
  • 私は各タスクをできるだけ早く開始したいと思います。

ここで、4つのEC2インスタンスがあるとすると、「-c5」でセロリを開始します。つまり、インスタンスごとに5つの同時タスク。

このセットアップでは、4つの新しいタスクがあり、idが確実にしたい場合、4つが同じインスタンスに移動し、各タスクがCPUを争うのではなく、それぞれが異なるインスタンスに移動します。

同様に、8つのタスクがある場合、2つのインスタンスがそれぞれ4つのタスクを処理するのではなく、各インスタンスのように一度に2つのタスクを取得します。

セロリはすでに私が説明したように動作しますか?そうでない場合、どうすればそのように動作させることができますか?

4

1 に答える 1

2

実際には簡単です。ec2-instanceごとに1つのcelery-instanceを開始します。同時実行性をec2-instanceあたりのコア数に設定します。

これで、タスクが干渉せず、インスタンス間で適切に分散されます。

(上記は、タスクがCPUにバインドされていることを前提としています)

于 2011-12-12T19:36:00.113 に答える