1

我有这样的代码,

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。
sweetpie api 将调用getter 方法get_wl_data 来获取全局变量wl_data。

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

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

4

1 回答 1

3

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

于 2013-08-27T13:07:50.097 回答