Django: сельдерей показывает разный статус для одной и той же задачи

#django #celery #django-celery #celery-task

#django #сельдерей #django-сельдерей #сельдерей-задача

Вопрос:

У меня есть приложение django с двумя задачами сельдерея, скажем, task1 и task2. task1 запускается при запросе POST от интерфейса, и запрос должен отправить обратно идентификатор задачи, чтобы интерфейс мог опросить его статус позже. предполагается, что задача 2 будет выполняться после успешного завершения задачи 1 асинхронно.

Вот мои определения задач:

 @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()
 

Вот как я запускаю их внутри своего views.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 никогда не выполняется, потому что статус task1 внутри task2 никогда не меняется PENDING . Что я делаю не так? Очевидно, что мои результаты сохраняются и доступны, но по какой-то причине я не могу видеть изменение статуса внутри другой задачи.
Я не могу объединить задачи в цепочку, потому что я должен отправить идентификатор первой задачи во внешний интерфейс.