Celery 结束芹菜工人的任务、时限、工作阶段或客户指示
我是西芹新手,如果能为我尚未编写的工作人员提供一些设计模式(或示例代码)方面的帮助,我将不胜感激 以下是工人所需特征的说明Celery 结束芹菜工人的任务、时限、工作阶段或客户指示,celery,Celery,我是西芹新手,如果能为我尚未编写的工作人员提供一些设计模式(或示例代码)方面的帮助,我将不胜感激 以下是工人所需特征的说明 工人将运行一个任务,从一个无止境的源(生成器)收集数据 除非指示停止,否则辅助任务将从生成器一直运行 工作任务应在出现以下任何一个触发器时正常停止 它超过了以秒为单位的执行时间限制 它超过了无止境生成器循环的多次迭代 客户端发送一条消息,指示工作任务立即完成 下面是一些我认为需要如何处理触发场景1和2的sudo代码 我不知道的是如何从客户端发送“立即完成”信号,以及如何
- 工人将运行一个任务,从一个无止境的源(生成器)收集数据
- 除非指示停止,否则辅助任务将从生成器一直运行
from celery.task import task
from celery.exceptions import SoftTimeLimitExceeded
COUNTLIMIT = # some value sent to the worker task by the client
@task()
def getData():
try:
for count, data in enumerate(endlessGeneratorThing()):
# process data here
if count > COUNTLIMIT: # Handle trigger scenario 2
clean_up_task_nicely()
break
except SoftTimeLimitExceeded: # Handle trigger scenario 1
clean_up_task_nicely()
我对revoke的理解是,它只在执行任务之前撤销任务。对于(3),我认为您要做的是使用AbortableTask,它提供了一种协作方式来结束任务:
在客户端,您可以调用task.abort(),在任务端,您可以轮询task.is_aborted()您可以使用revoke终止执行任务