2015-12-24 17 views
0

我有當前的路線路線超時所以memoize的不工作

@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) 

當我在本地運行這個,因爲它沒有超時,它工作正常。一旦結果保存到緩存中並在隨後的重新加載時立即加載該函數後運行。但是一旦我運行該路由時,它就會放到服務器上。

即使任務在超時後完成,當我重新加載函數時,它將重新執行任務,而不是從緩存中調用它。

有沒有另一種方法我應該這樣做?

+0

你用什麼來爲服務器上的請求提供服務?似乎請求在作業完成前被殺死。 –

+0

如果使用uwsgi,它可能是config中的'harakiri'參數。 –

+0

@EugeneSoldatov nginx,標準路由。該功能可能需要一段時間才能運行15-30分鐘,這並非前所未聞。不知道是否要設置標題在nginx中過期很長 – nadermx

回答

0

我繼續解決這個問題,把long函數放在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))