现在我有@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),
},
}
但我的两个工作人员似乎不止一次地运行任务,大概是因为一个工作者有并发线程?如何确保任务仅由单个工作线程上的单个线程运行一次?
我在shell中看到的示例:
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。
答案 0 :(得分:0)
也许您想在其自己的工作进程中运行python脚本。
<强>实施例强>
worker: python indefinite_task.py
这可确保只为该工作程序运行一个任务。