更新:正如評論指出的,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,可能比多處理簡單。