当前位置: 移动技术网 > IT编程>脚本编程>Python > uwsgi+django架构程序内部无法获取全局变量

uwsgi+django架构程序内部无法获取全局变量

2018年12月09日  | 移动技术网IT编程  | 我要评论

五华县人民政府公众网,湖南跨年演唱会刘德华,森马官方旗舰店

近期开发了一个djangoi程序,用django自带的python manage.py runserver 0.0.0.0:80 运行方式无任何问题,但用django+nginx+uwsg部署运行有时候却出现问题【我程序的原理是用户第一次登陆成功后将用户信息保存到一个全局变量,后面登陆其他页面直接从全局变量中获取已保存的信息】,最后debug程序发现是程序内部的全局变量出现了问题。后来各种倒腾发现并不是我们自身程序问题,而是uwsgi的工作原理有关,我启动uwsgi是使用了多进程,多线程:

uwsgi配置文件:

socket = 127.0.0.1:9999
chdir = /data/wwwroot/king_wechat/
wsgi-file = /data/wwwroot/king_wechat/untitled2/wsgi.py
processes = 4
threads = 2
stats = 127.0.0.1:9191

 

我们都知道线程属于进程,同一个进程里的线程之间可以相互访问内存,而不同进程之间的内存是隔离的,上例中启用了四个进程,第一个用户访问的时候调用一个进程,第二个用户访问时可能新启动了一个进程,所以导致程序无法获取到第一次生成的全局变量。

解决方案:

1.禁用uwsgi多进程。

socket = 127.0.0.1:9999
chdir = /data/wwwroot/king_wechat/
wsgi-file = /data/wwwroot/king_wechat/untitled2/wsgi.py
#processes = 4
threads = 2
stats = 127.0.0.1:9191

2.使用uwsgi自带的cache功能。

3.使用mysql/memcache/redis等外部存储,而不使用python自带的全局变量存储。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网