如何在RQ python中通过id获取Job?

时间:2013-03-03 01:56:35

标签: python redis

所以,基本上我想构建一个在heroku上使用RQ的长轮询应用程序。我看过这个问题Flask: passing around background worker job (rq, redis),但没有用。

这基本上就是我正在做的事情。

@app.route('/do_something', methods=['POST'])
def get_keywords():
    data_json = json.loads(request.data)
    text = urllib.unquote(data_json["sentence"])

    job = q.enqueue(keyword_extraction.extract, text)
    return job.key

@app.route('/do_something/<job_id>', methods=['GET'])
def get_keywords_results(job_id):
    job = Job().fetch(job_id)

    if(not job.is_finished):
        return "Not yet", 202
    else:
        return str(job.result)

没有什么是花哨的,所以当POST请求到来时,它将对作业进行排队并将job_id立即返回给用户,然后用户将使用该键继续轮询结果。但是,由于此行Job().fetch(job_id)返回

,我似乎无法使其正常工作

NoRedisConnectionException: Could not resolve a Redis connection.

任何帮助都会非常感激。

3 个答案:

答案 0 :(得分:15)

我已经发现了这一点,万一有人感兴趣。它必须是这一个。

Job.fetch(job_id, connection=conn)

答案 1 :(得分:1)

在运行时发现的RQ版本0.13.0中:

j = q.enqueue(job_func)

j.key将是rq:job:之前的键。

因此,在获取我需要使用的作业时,框架中的其他位置:

j = q.fetch_job(key[7:])

j.result将为None或返回值job_func的地方。

不确定是否有更好的方法来解决这个问题...

答案 2 :(得分:0)

这是由于回归现已修复,详见https://github.com/nvie/rq/issues/479

您需要从github master分支安装才能解决此问题,直到将其发布到PyPI。