2011-05-26 35 views
2

我知道Jython和IronPython可以并行运行线程(以利用多核或SMP机器),因为它们的虚拟机实施。 CPython中是否有一个实现或扩展? 我不是在谈论多处理,因为在http://docs.python.org/library/multiprocessing.html并行运行的python线程?

多重处理模块中的子进程与JVM或.Net中的线程相比如何“重”?每个Process对象的Python运行时是否有开销?

我也见过用于并发的Tasklets堆栈“方式”,但他们使用循环调度并不能并行运行Tasklets。

+1

定期CPython线程实际上是完全并行的系统线程 - 它们只是获取互斥的GIL。因此,*不获取GIL *的CPython [C]扩展避免了这种互斥的运行。不足之处?除非拥有GIL,否则不要混淆CPython对象。核心“问题”仅仅是CPython如何设计(或不设计)跨线程工作。它需要一个更简单的方法,但不能同时执行Python(在GIL下)。 – 2011-05-26 20:39:32

+0

在网络上等待的线程(例如,发出HTTP请求)也可以有效地并行运行,尽管这没有利用多个内核。 – 2011-05-26 21:18:28

回答

6

多处理模块使用完整的过程。这意味着它fork()s。所以这不像通常谈论线程时通常所说的通常的POSIX线程那样。

+0

我发现了一个非常好的GIL视频和python中的线程http://us.pycon.org/2010/conference/schedule/event/76/ – firephil 2011-05-27 12:26:24