Python 如何从内部任务取消芹菜链(缺少request.chain、request.callbacks)
第一个S/O问题! 我知道其他一些S/O线程已经部分介绍了这一点,但到目前为止,我还没有找到一个基于相关问题的有效解决方案 我有一个芹菜连锁店,我这样打电话:Python 如何从内部任务取消芹菜链(缺少request.chain、request.callbacks),python,django,task,celery,Python,Django,Task,Celery,第一个S/O问题! 我知道其他一些S/O线程已经部分介绍了这一点,但到目前为止,我还没有找到一个基于相关问题的有效解决方案 我有一个芹菜连锁店,我这样打电话: result = chain(do_one_search.s(user_id) | do_another_search.s() | and_now_score.s() | and_ano
result = chain(do_one_search.s(user_id) |
do_another_search.s() |
and_now_score.s() |
and_another_task.s() |
order_product.s()).apply_async(expires=10, retry=True)
每个任务的设置方式如下:
@shared_task(bind=True, max_retries=3)
def do_one_search(self, user_id):
user = User.objects.get(user_id=user_id)
user.do_one_search_worker_id = current_task.request.id
user.save()
if user.passes_a_check:
some_util = SomeUtil()
result = some_util.search_util(user_id)
if user.fails_a_check_after_util_runs:
revoke(current_task.request.id, terminate=True) # this doesn't work
self.request.chain = self.request.callbacks = None # this doesn't work
else:
return guid
else:
self.request.chain = self.request.callbacks = None # yup, doesn't work.
因此,revoke
不起作用-链中的下一个任务仍在运行。
将self.request.chain/callbacks
设置为None
也不起作用。我无法访问链中的任何内容或对self.request
对象的回调——它们都返回空。我认为这可能是芹菜版本的语法问题,并尝试了self.request.chain[:]=[]
,结果抛出了一个错误(NoneType)
我还在运行块后的检查失败块中引发了一个异常,以确保任务ID可通过当前任务访问-它是
我认为可能是禁用了结果
,但尝试从这些工作ID获取AsyncResult对象效果很好(它们总是处理
),我认为如果禁用了结果
,情况就不会如此
我不是芹菜专家,所以我在这里被难住了……知道得比我多的人有什么想法吗?我是否遗漏了共享任务
s或链
s?
谢谢