gpt4 book ai didi

python - Django 设置变量*有时*会被重置,但不确定原因

转载 作者:行者123 更新时间:2023-12-01 09:06:47 25 4
gpt4 key购买 nike

我在 Django settings.py 中定义了一个字典,为我的所有用户充当一种...假的临时数据缓存。然而,我注意到它的行为并不符合我想要的方式,并且似乎随机重置回默认值。

settings.py

# initialize with a fake key:value for ease in logging
STORE_DATA = {'hello': 'goodbye'}

views.py

def get_data(name):
from apiclient.discovery import build

search_q = name
service = build('youtube', 'v3', developerKey='<key-here>')
results = service.search().list(
part='snippet',
channelId='<channel-here>',
type='video',
q=search_q,
).execute()

settings.STORE_DATA[name] = results['items']
result = settings.STORE_DATA[name]
return result

page.videos = []
if page.name in settings.STORE_DATA:
page.videos = settings.STORE_DATA[page.name]
else:
page.videos = get_data(page.name)

这是引用此全局变量的唯一代码。它只是简单地存储 youtube api 调用的结果,因此我们不必在每次有人访问该页面时都进行查询。

但是 - 有时这有效,有时则无效。有时,存储在字典中的键:值对会重置回其初始状态。这是我的日志中打印的一些内容 -

cache before the call - [u'hello']
"page1" - 2018-08-22 23:23:47
cache after the call - [u'page1', u'hello']

cache before the call - [u'hello']
"page1" - 2018-08-22 23:24:13
cache after the call - [u'page1', u'hello']

cache before the call - [u'page1', u'hello']
page1 - found in cache!
cache after the call - [u'page1', u'hello']

cache before the call - [u'page1', u'hello']
page1 - found in cache!
cache after the call - [u'page1', u'hello']

cache before the call - [u'hello']
"page1" - 2018-08-22 23:27:50
cache after the call - [u'page1', u'hello']

第一次你可以看到,它的缓存中没有数据,所以它存储了它。好的。第二次……等等。数据不存在。再次存储它。第三次和第四次——它就在那里!好的!第五次——wtf。又走了。

这太奇怪了,对我来说没有任何意义。有人知道会发生什么吗?

最佳答案

如果您为uwsgi配置了多个工作人员,他们每个人都将拥有自己的Python解释器(并且每个工作人员将拥有您的字典的单独副本)。这就是为什么建议使用单个数据存储来进行缓存。

您可以通过将workers(或processors,它们是同义词)设置为1来测试此问题,看看是否可以解决问题.

关于python - Django 设置变量*有时*会被重置,但不确定原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51976579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com