如何创建在启动 Django 应用程序时无限期运行的单例 celery 任务?
How do you create a singleton celery task that runs indefinitely upon starting a Django application?
现在我有一个 @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。
也许您想 运行 python 脚本在它自己的工作进程中。
例如:
worker: python indefinite_task.py
这确保该工作人员只有一项任务 运行。
现在我有一个 @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。
也许您想 运行 python 脚本在它自己的工作进程中。
例如:
worker: python indefinite_task.py
这确保该工作人员只有一项任务 运行。