我有一个将数据发送到另一个服务的 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)
