使用 python huey 从 redis 数据存储中获取任务结果

Getting task result with python huey from redis data store

我正在使用 flask 中的 huey 任务队列 https://github.com/coleifer/huey。我正在尝试 运行 一个任务并从我的初始函数中获取一个任务 ID 号:

@main.route('/renew',methods=['GET', 'POST'])
def renew():
    print(request.form)
    user =request.form.get('user')
    pw =request.form.get('pw')
    res =renewer(user,pw)
    res(blocking=True)  # Block for up to 5 seconds
    print(res)
    return res.id

在 运行 之后,我插入输出的 id(与屏幕截图中的结果相同)

变成:

@main.route('/get_result_by_id',methods=['GET', 'POST'])
def get_result_by_id():
    print(request.form)
    id =request.form.get('id')
    from ..tasking.tasks import my_huey
    res = my_huey.result(id)
    if res==None:
        res = 'no value'
    return res

但是我得到 'no value'

如何访问数据存储中的值?

当您在 def renew() 中执行 res(blocking=True) 时,您正在从结果存储中获取结果并有效地删除它。当您随后尝试使用 id 再次获取结果时,它只会 return 什么都没有。

你有 2 个选项来解决这个问题:

  • 使用 res(blocking=True, preserve=True) 将结果保存在结果存储中,这样您仍然可以在第二次调用时获取它。
  • 使用像 RedisExpireStorage 这样的过期结果存储。在设置 huey 实例时配置此存储时,您可以指定结果应存储多长时间。这会给你 x 时间来根据 task/result id 进行第二次调用。