zoukankan      html  css  js  c++  java
  • uwsgi+django架构程序内部无法获取全局变量

    近期开发了一个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自带的全局变量存储。

  • 相关阅读:
    Reference Counting GC (Part two :Partial Mark & Sweep)
    Reference Counting GC (Part one)
    Union File System
    Linux Cgroups
    Mark Sweep GC
    取模运算
    负数取模怎么算
    牛客【2021寒假集训营第一场】J-一群小青蛙呱蹦呱蹦呱
    记codeforces一个简单模拟题
    筛法求素数
  • 原文地址:https://www.cnblogs.com/dufeixiang/p/10091431.html
Copyright © 2011-2022 走看看