3

Web アプリケーションにセロリを使用しています。セロリは親タスクを実行し、さらにタスクのパイプラインを実行します

セロリの問題点

  1. 親タスクのステータスを確認するために luigi で取得した依存関係グラフとビジュアライザーを取得できません

  2. Celery は、失敗したパイプラインを再開し、失敗した場所から開始するメカニズムを提供しません。

ルイージから簡単に入手できるこれらの 2 つのこと。

だから私は、セロリが親タスクを実行したら、そのタスク内でルイージパイプラインを実行すると考えていました。

つまり、 queuesize に基づいてセロリワーカーを自動スケーリングする必要があります。それは複数のマシンにまたがるルイージワーカーに影響しますか??

4

1 に答える 1

7

試したことはありませんが、一般的にPythonコードから行うのと同じ方法で、セロリタスク内でルイージタスクフォームを呼び出すことができるはずだと思います:

from foobar import MyTask
from luigi import scheduler

task = MyTask(123, 'another parameter value')
sch = scheduler.CentralPlannerScheduler()
w = worker.Worker(scheduler=sch)
w.add(task)
w.run()

キューとセロリ ワーカーのスケーリングについて: ルイージ タスクを呼び出すセロリ ワーカーが多すぎる場合は、もちろん、ルイージ スケジューラ/デーモンをスケーリングして、API リクエストの数を処理できるようにする必要があります (実行するタスクを呼び出すたびに)。 、Luigi スケジューラ API をヒットすると、N 秒ごとに - 設定によって異なります - タスクはスケジューラ API をヒットして「私は生きています」と言い、タスクが -error または success で終了するたびに - スケジューラ API をヒットします、 等々)。

そうです、スケジューラーをよく見て、あまりにも多くの http リクエストを受信して​​いないか、データベースがボトルネックになっていないかを確認してください (luigi はデフォルトで sqlite を使用しますが、簡単に mysql または postgres に変更できます)。

更新

バージョン 2.7.0以降、ここに表示luigi.scheduler.CentralPlannerSchedulerされているように名前が変更さluigi.scheduler.Schedulerれたため、上記のコードは次のようになります。

from foobar import MyTask
from luigi import scheduler

task = MyTask(123, 'another parameter value')
sch = scheduler.Scheduler()
w = worker.Worker(scheduler=sch)
w.add(task)
w.run()
于 2016-05-09T14:44:18.527 に答える