2014-03-25 56 views
-1

我正在研究不同的方式来避免Windows上Python 2.7的GIL限制。在Python上避免GIL

一种方法似乎是multiprocessing模块,但它使用进程而不是线程,看起来好像很贵。我发现了一个名为Parallel Python的pp包,它声称它避免了GIL,但是我没有看到执行速度的改进,并且每当我运行任何基准时,只有一个处理器很忙 - 所以这就像是同时运行线程,但不是并联...

有没有一个模块可以避免GIL的严重限制?

非常感谢您

+0

你可能想指定*为什么*正好GIL是你的问题。这将有助于适当回答范围问题。 –

+0

我想在一台多核机器上运行一堆线程来并行处理任务,最终完成串行处理。 – gt6989b

+2

流程为什么会“昂贵”?如果您目前的最大性能问题是管理流程的成本,那么您很可能不得不下降到C++(这种情况不太可能)。 –

回答

1

Cython可以为您解决问题的选项。它与CPython完全兼容。你可以简单地release and acquire GIL

with nogil: 
    # code executed with GIL released 
+0

谢谢,我想我需要阅读它... – gt6989b

+0

以及那不会解决他的问题,因为他仍然需要多处理利用多个CPU核心。 –

+0

@Puciek你可以用Cython实现的释放GIL的函数启动新的线程。这是NumPy能够在多个内核上并行执行一些操作的方式。 – maxbublis