nginx 为什么我的全局字典值在Django的不同视图中会改变?

zbsbpyhn  于 5个月前  发布在  Nginx
关注(0)|答案(1)|浏览(53)

在我的Django应用程序中,我有一个全局字典,它存储了一个Class的一些示例。这个字典的值被我的一个Django视图更改。然后我在我的其他视图中使用这个全局字典。问题是,在生产环境中,当我在其他视图中访问这个全局字典时,它的值被更改(全局字典更改为其初始值)。
我使用Gunicorn和Nginx在Ubuntu服务器上部署了Django应用程序。
以下是场景:

my_global_dict = {} # This is the global dictionary with initial value of empty dict

def view1(request):
    my_global_dict["key0"] = myClass() # Adding my class instance to the global dict
    ...

def view2(request):
    print(my_global_dict) # Prints: {}. The global dict is empty in this view and others
    ...

字符串

我强调在开发环境下的过程没有问题,而且在Apache和IIS上也很好用,面临的问题是在Gunicorn和Nginx上部署后。

先谢谢你了!

bvn4nwqk

bvn4nwqk1#

根据评论中的信息,你的问题来自于你配置了超过1个worker的gunicorn。现在,你设置了3个worker,你的pod将有3个django在1个服务器上运行(作为worker)。当1个请求到来时,worker master将把它处理到3个worker中的1个(每个worker有不同的全局字典)。所以你看到了不同的视图。
为了避免这个问题。你不使用全局变量。你可以使用缓存来存储变量。所有的worker将在缓存中获得相同的值。一个不错的选择是memcached https://docs.djangoproject.com/en/4.2/topics/cache/

相关问题