2017-04-11 32 views
-1

我學習多線程的Python(CPython的)。我知道GIL以及它如何將線程限制到單個內核(在大多數情況下)。標準庫的哪些部分可以運行多核?

我知道,I/O功能,可以運行多芯,但我一直無法找到什麼樣的標準庫的部分可以在多個內核上運行的列表。我相信,urllib的可運行多芯,允許在一個單獨的核心上下載一個線程(但一直無法找到的文檔證實這一點)。

我試圖找出是,其標準庫的部分將運行多核心,因爲這似乎並沒有在文檔中指定。

從文檔摘自:

然而,一些擴展模塊,標準或第三方,被設計成執行計算密集型任務,如壓縮或散列時釋放GIL。另外,GIL在執行I/O時總是被釋放。

+1

除了垃圾郵件進程外,它們都不能運行多核心,如果您正在討論線程,它們都可以運行多線程,儘管在I/O操作中您不會有更好的速度性能。 – Netwave

+0

謝謝@DanielSanchez。所以我知道除了執行全局解釋器鎖釋放的I/O之外,多線程Python並沒有給你帶來太多好處。在執行特定的繁重任務時,我也知道這種情況 - 請參閱我的編輯。我不知道的是Python標準庫的哪些部分釋放了鎖並允許多核線程化。 – geminiCoder

回答

0

使用multiprocessing軟件包,您可以編寫真正的並行程序,其中單獨的進程在不同的核心上運行。對每個子流程可以使用哪些庫(標準或非標準)沒有限制。

大約多進程編程棘手的部分是當處理需要交換信息(例如,通過相互的值,等待對方以一定的任務完成)。 multiprocessing包包含幾個工具。

相關問題