假设有一个很长的任务需要1分钟。当用户发出请求/get-info
并等待响应时,它应该返回结果。我正在使用delay()
,wait()
,并且一切正常。现在,我想要是否另外5个用户发出相同的请求/get-info
,我希望他们“连接”到同一任务并在任务完成后获得结果。我正在尝试在Redis中保存任务ID。但是到目前为止,我有两个问题。
如果我使用AsyncResult()
并等待(),第二个请求将挂起。
如果我使用AsyncResult()
并声明状态,则第一个请求将挂起。我该如何实现?
@main.route('/get-info', methods=['POST'])
def get_info():
if redis.exists('getInfoTaskId'):
taks_id = redis.get('getInfoTaskId')
task = add_together.AsyncResult(taks_id)
result = task.wait()
# result = task.state - if uncomment and comment the line above the first req hangs
else:
task = add_together.delay(23, 42)
redis.set('getInfoTaskId', task.id, ex=600)
result = task.wait()
redis.delete('getInfoTaskId')
return f"task result is {result}"