芹菜在等待另一个请求的任务

时间:2020-05-30 15:20:43

标签: python asynchronous flask celery

假设有一个很长的任务需要1分钟。当用户发出请求/get-info并等待响应时,它应该返回结果。我正在使用delay()wait(),并且一切正常。现在,我想要是否另外5个用户发出相同的请求/get-info,我希望他们“连接”到同一任务并在任务完成后获得结果。我正在尝试在Redis中保存任务ID。但是到目前为止,我有两个问题。

  1. 如果我使用AsyncResult()并等待(),第二个请求将挂起。

  2. 如果我使用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}"

0 个答案:

没有答案
相关问题