我有这样的代码,
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任务调用的。请帮我解决这个问题。答案 0 :(得分:4)
如果您在Django项目中使用全局变量进行任何,那么您做错了。在这种情况下,Celery和Django在完全独立的进程中运行,因此无法共享数据。您需要让Celery将数据存储在某个位置 - 在db或文件中 - 以便Django可以将其提取并提供服务。