当 Python 默认 No GIL 后, Web 框架是不是要大洗牌了

66 天前
 maocat
Flask, Django 这些老牌框架会焕发第二春吗
5698 次点击
所在节点    程序员
35 条回复
craftsmanship
65 天前
@RangerWolf 虽然我同意你的观点 且认为 Python 的主场在 AI 而不在 Web 但是楼主想讨论的大概是 Python Web 而不是 Web 所以没必要跟其它语言对比 只讨论 Python 本身就好
rainbowhu
65 天前
No GIL 应该主要还是针对 AI 的场景,Web 那块感觉没什么动力去改。毕竟 No GIL 其实主要就是提高计算性能,Web 那块又不需要海量计算,可能瓶颈在 IO 更多一点。
nolan1864
65 天前
@iorilu

gil 的问题是多线程的情况下,其实只有一个线程在工作,所以在有 gil 的情况下,多线程跟一个线程用 async 的性能一样。

如果没有 gil ,那么多线程的就跟有 gil 的多进程一样了,还不存在进程间数据共享的问题
xing7673
65 天前
@rogwan 线程之间的数据共享啊
jackOff
65 天前
我希望可以彻底解放 python 画界面的多线程限制,pyside 这玩意虽然好用,但是单线程让这玩意全和业务锁一个线程里了,io 任务耗时一长比亚迪的 ui 界面直接卡死
angrylid
65 天前
单人项目怎么爽怎么来。团队开发最好还是用静态类型且语法呆板的东西。Go 或者 Java 这种东西大行其道真有他的道理
Rorysky
65 天前
GIL 是进程锁, 开销极大, 没啥用

落后太多了,安心做 ai 计算器吧
rogwan
65 天前
@xing7673 No GIL 之后,还是用 threading.Event()、Queue 、threading.Lock() 共享数据?
Lockroach
65 天前
nogil 性能和内存占用还倒退了一部分,如果不专门做多线程优化的话,还是用 gil 的版本比较好
liuguang
65 天前
@twig #7
问了一下 ai
GIL (Global Interpreter Lock ,全局解释器锁) 是当前标准 Python (CPython) 解释器中的一个核心机制。你可以把它想象成一个“通行证”。

功能:在一个 Python 进程中,无论你有多少个线程,GIL 都确保同一时刻只有一个线程能够执行 Python 字节码。

目的:GIL 的主要目的是保护 Python 内部的数据结构,简化内存管理(特别是引用计数)。它使得编写 C 语言扩展变得更容易,因为扩展的开发者不必处理复杂的多线程同步问题。

简单比喻:
想象一个厨房里有多个厨师(线程),但只有一把菜刀( GIL )。无论有多少厨师,同一时间只有一位能用这把刀切菜(执行代码)。这对于需要等待烤箱预热( I/O 操作)的厨师们来说没问题,但在所有人都需要切菜( CPU 计算)时,效率就非常低了。
xing7673
64 天前
@rogwan #28 噢你想问的是范式上的解决方案啊,那现在还需要迭代,毕竟性能上才刚刚过及格水平
LitterGopher
64 天前
個人覺得不會, 因爲 Python 的吸引力從來就不是源自運行速度, 所以如果某天 Python 被邊緣化不可能是因爲運行速度太慢, 某天統一天下也不會是因爲運行速度超越彙編.
Zy143L
63 天前
@RangerWolf 并发都是下层的..指不定下层是 rust 实现的..例如 py 框架 Robyn 是 rust 的运行时
sunorg
62 天前
不如用大 PHP ?
chenqh
62 天前
搞 WEB,多进程和多线程在并发不高的情况下,差距有多大呢?

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

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

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

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

© 2021 V2EX