2013-08-27 75 views
1

我有這樣的代碼全局變量,使用Django和芹菜

wl_data = {} 

def set_wl_data(): 
    global wl_data 
    wl_data = get_watchlist_data() 


def get_wl_data(scripcodes): 
    # Filtering Data 
    result = {scripcode:detail for scripcode, detail in wl_data.iteritems() if int(scripcode) in scripcodes or scripcode in scripcodes} 
    return result 

我運行這是一個Django項目, 我打電話芹菜setter方法,以更新全局變量wl_data。
tastypie api將調用getter方法get_wl_data來獲取全局變量wl_data。

問題是芹菜正在更新wl_data。 但是,當我們在瀏覽器中點擊tastypie api url時,獲取方法 會提供舊數據。

堆棧溢出中有這麼多相關的問題,但這裏的區別是setter方法被celery任務調用。請幫我解決這個問題。

回答

4

如果你正在做什麼與Django項目中的全局變量,你做錯了。在這種情況下,Celery和Django在完全獨立的進程中運行,所以不能共享數據。您需要讓Celery將數據存儲在某個地方 - 在數據庫或文件中 - 以便Django可以將其提取並提供。

+0

謝謝@ daniel-roseman.I使用MongoDB作爲後端。我應該使用memchaced還是redis像內存中的存儲或我應該使用Mongodb本身來存儲來自芹菜的數據。 – zeenfaiz

+0

其中任何一個都可以。不過,也可以使用MongoDB,因爲您已經創建了它。 –

+0

謝謝@丹尼爾。 – zeenfaiz