2

现在我有一个@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),
    },
}

但是我的两个工人似乎不止一次地运行该任务,大概是因为一个工人有并发线程?如何确保任务仅由单个工作线程上的单个线程运行一次?

我在外壳中看到的示例:

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

编辑:我正在使用Procfilewith heroku。

4

1 回答 1

0

也许您想在它自己的工作进程中运行 python 脚本。

前任:

worker: python indefinite_task.py

这可确保该工作人员只运行一项任务。

于 2015-05-05T22:18:21.050 回答