2
celery_app.conf.update(
CELERYBEAT_SCHEDULE = {
'taskA': {
'task': 'crawlerapp.tasks.manual_crawler_update',
'schedule': timedelta(seconds=3600),
},
'taskB': {
'task': 'crawlerapp.tasks.auto_crawler_update_day',
'schedule': timedelta(seconds=3600),
},
'taskC': {
'task': 'crawlerapp.tasks.auto_crawler_update_hour',
'schedule': timedelta(seconds=3600),
},
})

私のアプリケーションには 3 つのビート タスクがあります。ビート タスクが実行されるとflower、タスクを管理するために使用します。

1 つのタスクにバグがあることがわかった場合は、タスク全体を停止してバグを修正する必要があります。次に、セロリを再起動します。

1 つのタスクを停止して、他のタスクを実行し続けることはできますか?

4

2 に答える 2

0

django を使用している場合、1 つの方法は、djcelery.schedulers.DatabaseScheduler の使用を検討することです。スケジュールは DB に保存されます。スケジュールを格納するテーブルの「有効」列を使用して、特定のスケジュールを有効/無効にすることができます。私はこのアプローチを使用しました。

于 2014-10-09T07:20:43.937 に答える
0

はい、可能です。1 つの方法は、3 つのタスクを異なるキューに入れ、異なるワーカーでタスクを実行することです。

これにより、タスクに問題が発生した場合はいつでも、対応するワーカーを停止できます。問題を修正し、ワーカーを再度実行してください。したがって、他の 2 つのワーカーは通常どおりタスクを実行します。

たとえば、このような定期的なタスクをスケジュールします

from celery.decorators import periodic_task
from celery.schedules import crontab

@periodic_task(run_every=crontab(minute=0, hour='*/1'), queue='q1',
               options={'queue': 'q1'})
def taskA():
    #do something

そしてワーカーを開始します

celery -A your_app worker -l info -Q q1 -B
于 2014-10-07T12:24:22.030 に答える