从工人那里开始工作时间

时间:2019-09-02 08:58:28

标签: flask celery

我需要花一些时间在工作人员(WORKER_NAME)上开始工作,并且遇到一些问题。

# create task
task = some_func.delay(arg1, arg2)

# get time of this task start

task_time_start = inspect().active().get(WORKER_NAME)[0].get('time_start')

# worker is WORKER_NAME, it can run only one (now) task at time.

但是当我发出POST请求(使用curl)时,出现以下错误:

task_time_creation = inspect().active().get(WORKER_NAME)[0].get('time_start')
IndexError: list index out of range

我认为这是因为我的任务已经完成了此调用,并且worker中没有active个任务。

如何使工作人员实时启动任务?

我以为AsyncResult对象中有一个字段(外观为https://docs.celeryproject.org/en/latest/reference/celery.result.html),但在那里我没有发现任何有关开始时间任务的信息。

1 个答案:

答案 0 :(得分:0)

有两种方法可以实现此目的。首先是使用task_prerun信号。另一种方法是监视Celery events并处理task-started事件。为此,您必须设置worker_send_task_events config选项(或使用-E选项启动worker)。您可能还需要设置task_track_started