V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
HelloAmadeus
V2EX  ›  问与答

搞不懂一个关于 flask 和 wsgi 的线程问题

  •  
  •   HelloAmadeus · 2017-12-05 16:46:51 +08:00 via Android · 2146 次点击
    这是一个创建于 2353 天前的主题,其中的信息可能已经有所发展或是发生改变。

    flask 是阻塞的嘛,那么一个 flask 进程每次只能处理一个请求。 uwsgi 来代理 flask 应用,只开 4 个进程,线程设为 1,那就同时处理 4 个请求。 uwsgi 开 1 个进程,100 个线程,那就可以同时处理 100 个请求。 进程 fork 很好理解,所有的状态都保存了,互不影响,一个进程无论全局还是局部变量都不会影响到另一个进程。 以上理解有问题吗? 继续,到线程这里,线程共享全局变量,那么我在 view 函数里面读取并修改全局变量,例如: gval=0

    @app.url('/') def hello() global gval with threading.Lock(): gval++ return 'hello world {}' .format(gval)

    上面代码,不论 uwsgi 开了多少线程,那么每次请求都会使得全局变量加 1。 以上对 uwsgi 多线程的理解有问题吗?

    wsgi 在哪一个函数开始新开一个线程,那些变量是线程共享的?

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1029 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:24 · PVG 04:24 · LAX 13:24 · JFK 16:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.