Skip to main content
 首页 » 编程设计

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

2024年12月31日22TianFang

我有一个将数据发送到另一个服务的 celery 任务。我已将 celery 任务 send_inventory_request 添加到基于 RequestSupplyStock 类的 View 中。当我发帖时,我应该首先从 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  

查看

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) 

请您参考如下方法:

你可以用 celery wait , 但不推荐

Waiting for tasks within a task may lead to deadlocks. Please read Avoid launching synchronous subtasks.

task = send_inventory_request.delay(payload,get_token(request)) 
result = task.wait(timeout=None, interval=0.5)