python - Celery 等待来自另一个请求的任务
问题描述
假设有一个需要 1 分钟的长任务。当用户发出请求/get-info
并等待响应时,它应该返回一个结果。我正在使用delay()
,wait()
一切正常。现在我想如果另外 5 个用户提出相同的请求/get-info
,我希望他们“连接”到同一个任务并在任务完成后得到结果。我正在尝试将任务 ID 保存在 redis 中。但到目前为止,我有两个问题。
如果我使用
AsyncResult()
和 wait() 第二个请求挂起。如果我使用
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}"
解决方案
推荐阅读
- sql-server - 使用 SQL SERVER QUERY 查找字符串中所有出现的模式
- reactjs - 日期过滤器在 IE 中不起作用 - 引导表下一个编辑器
- python - Anaconda Navigator 无法打开 - 已尝试所有其他线程
- amazon-web-services - AWS VPC 对等连接破坏 RDP?
- python - TimeSeriesSplit - 如何聚合(或非筒仓)拆分?
- python - 检查找到的元素的算术值
- python - 使用 pyipopt 进行优化,在 jupyter notebook 中使用 pyipopt 的问题
- firebase - 如何将动态链接域从一个项目转移到另一个项目
- powershell - 使用 Get-Date -UFormat 格式化 Unix 时间
- python - Python - 你能帮我从我重复的一段代码中创建一个类吗?