全球变量与django和芹菜

时间:2013-08-27 12:49:33

标签: python django celery django-celery

我有这样的代码,

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项目运行, 我从celery调用setter方法,以更新全局变量wl_data tastypie api将调用getter方法get_wl_data来获取全局变量wl_data。

问题是芹菜正在更新wl_data。 但是当我们在浏览器中点击tastypie api url时,getter方法 提供旧数据。

堆栈溢出中有很多相关的问题,但这里的区别是setter方法是由celery任务调用的。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:4)

如果您在Django项目中使用全局变量进行任何,那么您做错了。在这种情况下,Celery和Django在完全独立的进程中运行,因此无法共享数据。您需要让Celery将数据存储在某个位置 - 在db或文件中 - 以便Django可以将其提取并提供服务。