2014-03-25 57 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