python中多執行緒和多程序的應用

lvye001發表於2024-11-08

選擇指南總結

  • 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 密集型任務,推薦使用 多執行緒。而對於 計算密集型任務,使用 多程序 更為合適。

相關文章