2013-08-27 76 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