【问题标题】:python threads that run in parallel?并行运行的python线程?
【发布时间】: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


【解决方案1】:

multiprocessing 模块使用完整的进程。这意味着它fork()s。因此,这与您通常所说的线程所指的通常的 POSIX 线程不同。

【讨论】:

猜你喜欢
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-19
  • 1970-01-01
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多