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