現在@sharedtask
、次のコードに正確に従う があります:
http://docs.celeryproject.org/en/latest/tutorials/task-cookbook.html#id1
そして、次のスケジューラー設定:
CELERYBEAT_SCHEDULE = {
'indefinite-task': {
'task': 'app.tasks.indefinite_task',
'schedule': timedelta(seconds=1),
},
}
しかし、私の 2 つのワーカーはタスクを複数回実行しているように見えます。これはおそらくワーカーが同時スレッドを持っているためでしょうか? タスクが 1 つのワーカーの 1 つのスレッドによって 1 回だけ実行されるようにするにはどうすればよいですか?
シェルで見ているものの例:
11:00:43 worker.1 | [2015-05-05 15:00:43,444: DEBUG/Worker-1] app.tasks.indefinite_task[b8b0445c-91e6-4652-bd75-4c609149161f]: Acquiring lock
11:00:43 worker.1 | [2015-05-05 15:00:43,444: DEBUG/Worker-2] app.tasks.indefinite_task[b8b0445c-91e6-4652-bd75-4c609149161f]: Acquiring lock
編集:Procfile
herokuで使用しています。