学习资料来源:【2021最新版】Python 并发编程实战,用多线程、多进程、多协程加速程序运行_哔哩哔哩_bilibili
若有侵权,联系删除。
一、程序的提速方法——多线程、多进程、多协程
在现代编程中,多线程、多进程和多协程是三种常见的程序提速方法。它们都可以用来提高程序的并发性和效率,但各有不同的特点和适用场景。
二、怎样选择多线程、多进程、多协程?
选择哪种模型主要取决于以下因素:
-
计算密集型 vs I/O 密集型:
-
多进程:适用于计算密集型任务,因为可以充分利用多核 CPU 的计算能力。
-
多线程:适用于 I/O 密集型任务,因为线程切换的开销较小。
-
多协程:适用于高并发的 I/O 密集型任务,因为协程的切换开销比线程更小。
-
-
全局解释器锁(GIL):
-
多线程:在 Python 中,由于 GIL 的存在,多线程在 CPU 密集型任务上并不会真正并行。
-
多进程:可以绕过 GIL 的限制,适合 CPU 密集型任务。
-
多协程:协程本身并不能绕过 GIL,但可以通过异步 I/O 和事件循环来提高效率。
-
-
资源消耗:
-
多进程:每个进程有独立的内存空间,资源消耗较大。
-
多线程:线程共享内存空间,资源消耗较小。
-
多协程:协程的资源消耗最小,适合高并发场景。
-
三关于多线程、多进程、多协程的一些基础知识
(一)全局解释器锁GIL
全局解释器锁(Global Interpreter Lock,GIL)是 Python 解释器为了保证线程安全而引入的一个机制。在任意时刻,只有一个线程可以执行 Python 字节码。这意味着在 Python 中,多线程并不能真正实现并行计算,尤其是在 CPU 密集型任务上。
(二)利用多线程加速爬虫10倍
多线程在 I/O 密集型任务(如网络爬虫)中表现出色。通过使用多线程,可以在等待网络响应时切换到其他线程,从而提高程序的效率。线程池(ThreadPoolExecutor)可以方便地管理线程,避免线程过多导致的资源浪费。
(三)好用的线程池threadpoolexecutor
线程池(ThreadPoolExecutor)是一种高效的线程管理工具。它可以根据任务的数量动态调整线程的数量,避免创建过多的线程。使用线程池可以显著提高程序的性能,尤其是在处理大量 I/O 密集型任务时。
四、使用多进程multiprocessing加速程序的运行
多进程(multiprocessing)模块可以创建多个进程,每个进程有独立的内存空间,可以充分利用多核 CPU 的计算能力。在 Python 中,由于 GIL 的存在,多进程是实现并行计算的常用方法。