線程
Last updated
Was this helpful?
Last updated
Was this helpful?
python的多線程並不是真正平行運算,即使一個程式開啟了多線程,在同一時間中真正在運行的線程只有一個,其他線程則是等待獲得GIL後才能進行,整體來說就是交替執行
1個程式只擁有一個GIL,如果想真正達到平行運算則需使用多進程(multiprocessing)
join --> 主線程等待子線程完成後才繼續執行(可設置timeout),start()後再加入join屬性
setDaemon --> 主線程不等子線程,需在線程start()之前設定
start與join的順序():
一個進程中都有一個GIL,線程必須取得GIL後才能運行,達到特定條件(ticks)後該線程才會釋出GIL,換下一個線程運行
CPU密集型 --> 各種for、if邏輯判斷,較花費CPU資源,容易觸發GIL交換,多線程不適合處理此問題,可能因為GIL轉換導致程式效率更差
I/O密集型 --> 讀寫文件、爬蟲,可以在線程等待回應時啟動另一線程執行新任務,避免浪費等待時間,多線程在此問題中效果較明顯
額 外參考資料