源本科技 | 码上会

Python 异步与并发编程

2026/04/05
2
0

Python异步编程的核心概念是什么

异步编程的核心是单线程实现高并发,核心概念有协程、事件循环、非阻塞 IO。它的关键逻辑是:任务执行时遇到 IO 操作(网络请求、文件读写),不原地等待,而是主动挂起,让 CPU 去执行其他任务,等 IO 完成后再唤醒继续执行。彻底避免了同步编程中 CPU 闲置的问题,用极小的资源就能处理海量并发任务。核心是协作式调度,由程序自己控制任务切换,而非操作系统强制切换,这也是它高效的根本原因。

Python中的asyncio是如何工作的

asyncio 是 Python 官方的异步编程框架,核心是事件循环。工作流程很简单:先创建一个事件循环,把所有协程任务注册到循环里;循环启动后,会按顺序调度任务运行;当任务遇到await关键字(异步 IO 操作),就会自动挂起,事件循环立刻切换执行下一个就绪任务;等之前的 IO 操作完成,任务会被重新唤醒,继续执行后续代码。整个过程在单线程内完成,没有线程切换的开销,专门针对 IO 密集型场景,实现超高并发。

Python协程与线程的区别及应用场景

协程是用户态的轻量级任务,在单线程内由程序控制切换,切换开销几乎为零,能轻松跑上万协程,不受 GIL 限制;线程是内核态的执行单元,由操作系统调度,切换开销大,受 GIL 影响,CPython 多线程无法利用多核。协程是协作式切换,线程是抢占式切换。应用场景:协程适合高并发 IO 密集型(爬虫、web 服务、接口请求);线程适合简单的 IO 任务,并发量不大、开发更简单的场景,无法处理超大规模并发。

Python中的GIL是什么及其影响

GIL 全称全局解释器锁,是 CPython 解释器的一把互斥锁。它的作用是:同一时刻,只允许一个线程执行 Python 字节码。这就导致 Python 多线程无法利用多核 CPU 实现真正的并行,只能并发。影响很明确:CPU 密集型任务用多线程完全没用,效率甚至比单线程还低;IO 密集型任务(等待时会释放 GIL),多线程可以提升效率。GIL 保证了 Python 底层的线程安全,但牺牲了多核性能,是 Python 多线程的核心限制。

Python中的多线程与多进程的区别及如何选择

多线程:轻量级,共享进程内存,创建销毁快、切换开销小,但受 GIL 限制,不能用多核;多进程:独立内存空间,每个进程有独立 GIL,能充分利用多核 CPU,但是创建销毁慢、开销大,进程间数据共享很麻烦。选择方式很直接:CPU 密集型任务选多进程,比如大数据计算、视频处理;IO 密集型小任务选多线程;高并发 IO 场景优先用协程,而非线程 / 进程。

如何在Python中使用多进程

Python 用内置multiprocessing库实现多进程,用法简单。基础用法:创建Process对象,指定目标函数和参数,调用start()启动进程,join()等待进程执行完毕。批量处理任务用进程池(Pool/ProcessPoolExecutor)更高效,能自动管理进程数量,避免频繁创建销毁进程。因为进程内存独立,数据共享需要用 Queue、Pipe、Manager 等工具。多进程专门解决 GIL 限制,是 CPU 密集型任务的最优解,代码编写和多线程语法几乎一致。