如何让 Python 实现真正多线程?

364 天前
 sbldehanhan

concurrent 这个模块是真正多线程吗?

3722 次点击
所在节点    Python
23 条回复
liuxingdeyu
364 天前
新版本已经去掉 gil 了,话说你为啥要用多线程,为了用 cpu ?
githmb
364 天前
不是号称胶水语言吗?粘一下 C 语言啊,fork 或者 pthread_create 一下
roundgis
364 天前
CPython thread 可是真 thread
westoy
364 天前
GIL 被妖魔化的太厉害了

python 的多线程就是 pthread

只是 python 有 GIL 锁会卡 PyObject 的操作

但是这个主要是卡纯 python 的

PyObject 转 C/CPP 的模块里是可以释放 GIL 的

所以大部分 C/CPP 写的库都是会释放 GIL 的, 包括原生 IO

但是因为早年 linux 没有线程, 之后有段时间线程也是基于 fork 的,2.6 的时候又大改过一次, 所以用的人并不多, 导致主流的 Linux 下面都提倡 IO 异步并发, 计算的直接 fork, 用线程的并不多.....
matrix1010
364 天前
@liuxingdeyu 你这是大新闻, 没有 GIL 的 Python 可以算作另一种语言了
sbldehanhan
364 天前
@githmb 但是如果线程的那个函数里面又调用了其他 Python 函数,那被调用的函数也得用 C 实现一遍。这样工作量就太大了。
sbldehanhan
364 天前
@liuxingdeyu 为了快,现在太慢了。
r6cb
364 天前
Alias4ck
364 天前
@liuxingdeyu 并没有 ,faster cpython 组 3.12 目标( https://github.com/faster-cpython/ideas/wiki/Python-3.12-Goals) 中 提到的[pep554]( https://peps.python.org/pep-0554/)也只是一个 draft 而且实现也是仅限于 C API 而且 pep554 还在讨论中( https://discuss.python.org/t/pep-554-multiple-interpreters-in-the-stdlib/24855/12)

另外实现`nogil`的是另一个 pep,有兴趣去看看[pep703]( https://peps.python.org/pep-0703/) 还只是一个 draft 虽然他给出了[实现]( https://github.com/colesbury/nogil)。
liuxingdeyu
364 天前
@matrix1010 @Alias4ck 额,是我表达有误了,我想表达的就是 3.12 的这个改版,去掉了很多关于核心使用的限制
ihciah
364 天前
换 Mojo
gitopen
364 天前
@r6cb ➕1
hertzry
364 天前
multiprocessing 凑活能用。
pollux
364 天前
@Alias4ck +1 good job
sujin190
364 天前
@liuxingdeyu #1 似乎不大可能做到吧,不是 python 语言自身难以做到,难的是那么多 C 开发的扩展都可能不兼容,这可就不是一件容易的事了
liuxingdeyu
364 天前
@sujin190 我表达的问题,其实不是完全抛弃掉 gil ,是改变现在的 gil 。却是 pep703 说了 c api 会有的不少问题,所以我觉得真的实现了这件事的版本会是个大版本
shalingye
364 天前
你所说的真正多线程,在 Python 里面应该叫做多进程,可以通过遍历列表等方式往进程池里面添加任务,同一时间执行的进程取内核数量,这样就可以充分利用 CPU 了。
tc132
364 天前
python 真的需要那么高的性能吗?你们是什么业务场景需要
newmlp
364 天前
多进程也不是不可以
RedisMasterNode
364 天前
之前一些实践基本是依赖 uwsgi 和 gunicorn 跑多个进程用的,承载压力的能力也不差

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

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

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

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

© 2021 V2EX