2017-04-23 35 views
2

有人告訴我,由於GIL,在Python中使用線程並不是一個好的做法。我認爲創建線程的開銷只會減慢速度,最終使其慢於單線程應用程序。然後,爲什麼Python首先要有線程庫?什麼時候應該使用線程?你什麼時候在Python中使用線程?

(我假設Python3)

+1

線程不適合計算密集型進程提供幫助。幸運的是,它對I/O綁定的流程(如Web應用程序)有很大的幫助。 – kindall

回答

0

GIL不是Python本身的問題,這是它的cpython執行的問題,如CPython的執行內存管理不是線程安全的。

Cpython使用python解釋器上的全局鎖來實現。因此,一個特定的python CPU綁定操作可以在特定的時間在特定的解釋器上運行。所以,不管你是單線程還是多線程,都是一樣的。

但是,想象一下,如果存在一些I/O綁定任務,如數據庫查詢或文件操作,其中python代碼實際上並未得到執行,那麼使用multithreading可以大大受益。

+0

此外,我最近使用Python線程來運行步進電機。因爲我不希望功能在電機反覆運行一步時阻塞,所以我使用另一個線程連續運行電機。 – Sawyer

1

@ kindall在他的評論中給出了答案。

多線程不是一個加速任何處理的神奇工具。這是在系統中同時存在多個線程的一種方法。它可以使用來分割多個核心上的處理以進行計算綁定處理(因爲全局解釋器鎖,所以這不在CPython中)。但它也可以用於io綁定處理:一個線程運行,其他線程等待io完成。一個很好的例子就是一個多線程的TCP服務器,其中每個線程都可以提供不同的客戶端連接。 CPython的實現在這裏很好,因爲GIL沒有理由阻塞已經在io級別被阻塞的線程。

而剛剛結束對一般的多線程:應該從未用於存儲綁定處理...

相關問題