我需要花一些时间在工作人员(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),但在那里我没有发现任何有关开始时间任务的信息。
答案 0 :(得分:0)
有两种方法可以实现此目的。首先是使用task_prerun
信号。另一种方法是监视Celery events并处理task-started
事件。为此,您必须设置worker_send_task_events
config选项(或使用-E
选项启动worker)。您可能还需要设置task_track_started
。