如何在 Django 中等待 celery 任务的结果

Phi*_*tua 8 python django celery celery-task django-rest-framework

我有一个 celery 任务,它将数据发送到另一个服务。我已将芹菜任务添加send_inventory_requestRequestSupplyStock基于类的视图中。当我发帖时,我应该首先从 celery 任务获取结果,然后继续并返回响应。我想首先等待 celery 任务的结果,然后从 post 方法返回响应,这是实现此目的的正确方法。

@app.task
def send_inventory_request(payload,token):
    auth = {'authorization':token}
    HEADERS.update(auth)
    url = PROCUREMENT_SUPPLY_STOCK_REQUESTS_URL
    res = requests.post(url,json=payload,headers=HEADERS)
    inventory_request_data = res.json()
    x= logger.info('Supply Stock Request {0} + {1}'.format(payload,token))
    print(x)
    return inventory_request_data 
Run Code Online (Sandbox Code Playgroud)

看法

class RequestSupplyStock(generics.CreateAPIView):

      def post(self, request, format=None):
          ........

          send_inventory_request.delay(payload,get_token(request))

          .........
          return Response(status=status.HTTP_201_CREATED)
Run Code Online (Sandbox Code Playgroud)

Hai*_*ine 7

可以使用 celery wait,但不推荐

等待任务内的任务可能会导致死锁。请阅读避免启动同步子任务。

task = send_inventory_request.delay(payload,get_token(request))
result = task.wait(timeout=None, interval=0.5)
Run Code Online (Sandbox Code Playgroud)