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 在哪一个函数开始新开一个线程,那些变量是线程共享的?