选择指南总结
- I/O 密集型任务:使用 多线程(
ThreadPoolExecutor
)。例如,爬虫抓取数据、从数据库或 API 获取信息、读取/写入文件等。 - 计算密集型任务:使用 多进程(
multiprocessing.Pool
)。例如,进行大量数据计算、数值分析等。 - 混合型任务:可以结合 多线程 和 多进程。例如,先用线程处理 I/O 操作,再用进程处理计算密集型任务。
5. 性能考量
- 在 Python 中,多进程适用于计算密集型任务,因为它绕过了 GIL 的限制,能够利用多核 CPU。
- 对于 I/O 密集型任务,线程池通常比进程池更高效,因为线程比进程更轻量级,且在处理 I/O 时线程可以释放 GIL,从而提高并发性能。
#多线程 from concurrent.futures import ThreadPoolExecutorwith 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 multiprocessingpool = 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 密集型任务,推荐使用 多线程。而对于 计算密集型任务,使用 多进程 更为合适。