18

というわけで、基本的にはherokuでRQを使ったロングポーリングアプリを作りたいと思っています。私はこの質問Flaskを見てきました:バックグラウンドワーカージョブ(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.

どんな助けでも本当に感謝しています。

4

3 に答える 3

22

誰かが興味を持っている場合に備えて、私はすでにこれを見つけました。代わりにこれでなければなりません。

Job.fetch(job_id, connection=conn)
于 2013-03-03T13:12:30.180 に答える
4

0.13.0実行中に見つけたRQバージョンでは:

j = q.enqueue(job_func)

j.keyが前に付いたキーになりますrq:job:

そのため、使用する必要があるジョブを取得するときに、フレームワークの他の場所で:

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

の戻り値はどこj.resultになりますか。Nonejob_func

これを処理するより良い方法があるかどうかはわかりません...

于 2019-02-11T04:39:35.670 に答える