Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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
Django:芹菜显示同一任务的不同状态_Django_Celery_Django Celery_Celery Task - Fatal编程技术网

Django:芹菜显示同一任务的不同状态

Django:芹菜显示同一任务的不同状态,django,celery,django-celery,celery-task,Django,Celery,Django Celery,Celery Task,我有一个django应用程序,有两个芹菜任务,比如task1和task2。来自前端的POST请求会触发task1,请求必须发回任务id,以便前端稍后可以轮询其状态。 task2应该在task1成功后异步运行 以下是我的任务定义: @shared_task(ignore_result=False) def task1(pk: int): # retrieve object matching pk return task1_func(obj) @shared_task(ignor

我有一个django应用程序,有两个芹菜任务,比如task1和task2。来自前端的POST请求会触发task1,请求必须发回任务id,以便前端稍后可以轮询其状态。 task2应该在task1成功后异步运行

以下是我的任务定义:

@shared_task(ignore_result=False)
def task1(pk: int):
    # retrieve object matching pk
    return task1_func(obj)


@shared_task(ignore_result=False)
def task2(task_id: int):
    task = AsyncResult(task_id)
    while not task.ready():
       logger.info("status {}".format(task.status))
        time.sleep(1)
    return task2_func()
下面是我在视图中触发它们的方式。py:

class MyView(viewsets.ModelViewSet):
    def create(self, request):
        # create object

        task = task1.delay(obj.pk)
        task2.delay(task.id)
        #breakpoint
        return Response(task.id, status=status.HTTP_200_OK)
现在,当我尝试在断点处检查状态时,它显示成功:

In [1]: task.id                                                                         
Out[1]: '97f8d150-de04-4848-a400-3882988c833c'                                          

In [2]: task.status                                                                     
Out[2]: 'SUCCESS'                                                                       

In [3]: AsyncResult(task.id).status                                                     
Out[3]: 'SUCCESS' 
但是task2中的代码永远不会执行,因为task2中task1的状态永远不会从
PENDING
更改。我做错了什么?显然,我的结果正在被存储和访问,但由于某些原因,我无法从另一个任务中看到状态的变化。 我无法链接任务,因为我必须将第一个任务的id发送到前端