我是芹菜的新手,我很感激为我尚未写的工人设计模式(或示例代码)提供一些帮助。
以下是对工人所需特征的描述。
当发生任何一个以下触发器时,worker任务应该正常停止。
以下是我认为我需要处理触发器方案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()
答案 0 :(得分:1)
我对撤销的理解是它只在执行任务之前撤销任务。对于(3),我认为你想要做的是使用AbortableTask,它提供了一种结束任务的合作方式:
http://docs.celeryproject.org/en/latest/reference/celery.contrib.abortable.html
在客户端,您可以调用task.abort(),在任务端,您可以轮询task.is_aborted()