當前位置:成語大全網 - 書法字典 - Python多線程是什麽意思?

Python多線程是什麽意思?

簡單來說,作為唯壹可能支持多線程的解釋語言(perl的多線程被禁用,PHP沒有多線程),Python的多線程是折中的,任何時候都只有壹個Python解釋器在解釋Python字節碼。

更新:正如評論指出的,Ruby也有線程支持,至少Ruby MRI有GIL。

如果妳的代碼是CPU密集型的,那麽多線程的代碼很可能是線性執行的。所以在這種情況下,多線程就是個雞肋,效率可能會因為上下文切換而不如單線程。

但是:如果妳的代碼是IO密集型的,多線程可以顯著提高效率。比如制作爬蟲(我不明白為什麽Python總是和爬蟲聯系在壹起…但我只想記住這個例子…),大部分時間爬蟲都在等待socket返回的數據。此時C代碼中有壹個釋放GIL,最終的結果是壹個線程在等待IO的同時,其他線程可以繼續執行。

另壹方面:妳不應該用Python寫CPU密集型代碼…效率就在那裏…

如果您確實需要在CPU密集型代碼中使用並發,請使用多處理庫。這個庫基於multi process,實現了類似多線程的API接口,部分實現了與pickle的變量* * *共享。

還有壹點,如果妳不知道妳的代碼是CPU密集型還是IO密集型,我教妳壹個方法:

多重處理這個模塊有壹個虛擬子模塊,它實現了基於多線程的多重處理API。

假設妳用多進程的池,用多進程實現並發。

從多處理導入池

如果您將此代碼更改為以下代碼,它將成為並發的多線程實現。

來自多重處理。虛擬導入池

兩邊都跑,以速度快者為準。

更新:

我才發現這個東西,concurrent.futures,包括ThreadPoolExecutor和ProcessPoolExecutor,可能比多處理簡單。