Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从内部任务取消芹菜链(缺少request.chain、request.callbacks)_Python_Django_Task_Celery - Fatal编程技术网

Python 如何从内部任务取消芹菜链(缺少request.chain、request.callbacks)

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

第一个S/O问题! 我知道其他一些S/O线程已经部分介绍了这一点,但到目前为止,我还没有找到一个基于相关问题的有效解决方案

我有一个芹菜连锁店,我这样打电话:

        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? 谢谢