在我的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上部署后。
先谢谢你了!
1条答案
按热度按时间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/