python中多线程和多进程的应用

选择指南总结

  • 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 密集型任务,推荐使用 多线程。而对于 计算密集型任务,使用 多进程 更为合适。

posted @ 2024-11-08 11:28  lvye001  阅读(35)  评论(0编辑  收藏  举报