選擇指南總結
- I/O 密集型任務:使用 多執行緒(
ThreadPoolExecutor
)。例如,爬蟲抓取資料、從資料庫或 API 獲取資訊、讀取/寫入檔案等。 - 計算密集型任務:使用 多程序(
multiprocessing.Pool
)。例如,進行大量資料計算、數值分析等。 - 混合型任務:可以結合 多執行緒 和 多程序。例如,先用執行緒處理 I/O 操作,再用程序處理計算密集型任務。
5. 效能考量
- 在 Python 中,多程序適用於計算密集型任務,因為它繞過了 GIL 的限制,能夠利用多核 CPU。
- 對於 I/O 密集型任務,執行緒池通常比程序池更高效,因為執行緒比程序更輕量級,且在處理 I/O 時執行緒可以釋放 GIL,從而提高併發效能。
#多執行緒 from concurrent.futures import ThreadPoolExecutor with ThreadPoolExecutor(max_workers=4) as executor: with open('imdb_movie.csv', mode='r', newline='', encoding='utf-8-sig') as file: reader = csv.reader(file) for row in list(reader)[:100]: m_id = row[0] executor.submit(start_url, m_id) # 多程序 import multiprocessing pool = multiprocessing.Pool(4) # 開啟CSV檔案 with open('imdb_movie.csv', mode='r', newline='', encoding='utf-8-sig') as file: reader = csv.reader(file) # 讀取每一行 for row in list(reader)[:100]: m_id = row[0] pool.apply_async(start_url, (m_id,)) pool.close() pool.join() # 關閉程序池
結論
如果你做的是爬蟲或者其他 I/O 密集型任務,推薦使用 多執行緒。而對於 計算密集型任務,使用 多程序 更為合適。