关于Flask线程交替机制与多线程的混淆

来源:6-13 flask中被线程隔离的对象

二位取根

2023-11-30

老师您好!因为是2023年了,抱歉直接上手了Flask3.0,有一定的编程基础,所以问题不是很大。但这节课下来有一个机制问题比较困惑我:
首先在Flask3.0中,app.run中是没有threaded这个参数的,默认不开启多线程
我通过以下代码,在postman中连续调用了两次test
@web.route(’/test’)
def test():
from flask import request
from app.libs.none_local import n
print(n.v)
n.v = 2
time.sleep(5)
print(’------------------’)
print(getattr(request, ‘v’, None))
setattr(request, ‘v’, 2)
print(’------------------’)
return ''
输出一次是1 2 None None,那么就意味着在单线程的情况下,Flask内部机制在类似sleep这种阻塞的时候交替执行了线程,等待sleep结束的时候再将线程换回来。(网上查Flask 的内部机制是通过事件循环和 WSGI 服务器等机制实现的并发性)。那么单核的情况下,因为Python的GIL的存在,即便是用threading启用多线程,一个进程同一时间也只能处理一个进程,即便不是CPU密集型程序,处理IO型程序也是通过优化线程执行顺序来进行优化的,那么和Flask内部交替执行线程的本质不是一样的吗?
我是否可以理解为只有在多核单进程的状态下,使用threading多线程才有优势?(我无法判断单核Flask内部切换执行线程的机制与多线程哪个更优,网上也没找到,GPT也没问清楚,希望老师详细解答一些或者推荐有没有什么文章链接可以解释清楚的,谢谢)

写回答

1回答

7七月

2023-12-13

CPU本身是可以多线程的,但是Python语言本身不能同时多线程并发,只能快速交替。这个和Flask没有关系。

0
0

Python Flask高级编程之从0到1开发《鱼书》精品项目

7月老师深入浅出剖析Flask核心机制,和你一起探讨Python高级编程

2735 学习 · 1267 问题

查看课程