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

2017-12-05 16:46:51 +08:00
 HelloAmadeus

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

2150 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/412217

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX