【发布时间】:2011-05-26 20:33:28
【问题描述】:
我知道 Jython 和 IronPython 可以并行运行线程(以利用多核或 SMP 机器),因为它们的 VM 实现。 CPython 中是否有实现或扩展可以做到这一点? 我不是在谈论http://docs.python.org/library/multiprocessing.html中的多处理
与 JVM 或 .Net 中的线程相比,多处理模块中的子进程有多“重”?每个 Process 对象是否有 python 运行时的开销?
我还看到了 Tasklet 用于并发的无堆栈“方式”,但它们使用循环调度并且不能并行运行 Tasklet。
【问题讨论】:
-
常规 CPython 线程实际上是完全并行的系统线程——它们只是获得一个互斥的 GIL。因此,不获取 GIL 的 CPython [C] 扩展避免了这种互斥运行。不足之处?除非你有 GIL,否则不要乱用 CPython 对象 :) 核心“问题”只是 CPython 是如何设计的——或者不是设计的——跨线程工作。它采用了一种更简单的方法,但代价是不能同时执行 Python(在 GIL 下)。
-
在网络上等待的线程(例如发出 HTTP 请求)也可以有效地并行运行,尽管这没有利用多核。
标签: python multithreading concurrency