我有一个向另一个服务发送数据的celery 任务。我已经将celery 任务send_inventory_request
添加到RequestSupplyStock
类视图中。当我发布时,我应该首先从celery 任务中获取结果,然后继续并返回响应。我想首先等待celery 任务的结果,然后从发布方法中返回响应,这是实现此目的的正确方法。
@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)
3条答案
按热度按时间smdnsysy1#
你可以用celery 等等,但不推荐
在任务中等待任务可能会导致死锁。请阅读避免启动同步子任务。
eyh26e7m2#
正如其他人已经在评论中提到的,以同步方式等待结果违背了使用celery的目的,但如果你仍然需要等待结果,那么就不要
delay
。只需像普通方法一样调用任务,它就会同步运行并返回结果:
wfsdck303#
在你的问题和例子之后,我有了一些见解。但主要的问题是,它不理解项目的完整架构。
我不明白你想从什么Angular 听任务状态。
这不是正确的解决方案。所有你可以检查它是一个-任务创建并成功保存在队列中。
你可以使用这个task.id,并随时检查它。
一个解决方案,我们可以生产只知道全貌。希望我在一些帮助