0

私は現在のルートを持っています

@app.route('/as/<keyword>', methods=['GET'])
@cache.memoize(timeout = 30 * 24 * 60 * 60)
def auto_suggest(keyword):
    job = q.enqueue(find_keyword, keyword, timeout = 60 * 60)
    while not job.result:
        time.sleep(1)
    return jsonify(word=job.result)

これをローカルで実行すると、タイムアウトしないため正常に動作します。関数が実行された後、結果がキャッシュに保存され、その後のリロード時に即座にロードされます。しかし、ルートを実行するときにサーバーに配置すると、タイムアウトになります。

タイムアウト後にタスクが完了しても、関数をリロードすると、キャッシュから呼び出す代わりにタスクが再実行されます。

これを行うべき別の方法はありますか?

4

1 に答える 1

0

先に進み、長い関数をredisキーに入れて、ルートからキーを呼び出すことでこれを解決しました。

@app.route('/as/<keyword>', methods=['GET'])
def auto_suggest(keyword):
    if not redis.get(keyword):
        q.enqueue(find_keyword, keyword, timeout = 60 * 60)
        return jsonify(word=False)
    return jsonify(word=redis.get(keyword))
于 2015-12-25T07:19:10.713 に答える