Skip to content
0

Python并发编程

进程

线程

协程

Python 异步编程,指的是基于事件循环协程编程技术。

在 Python3.6 版本那会,异步并不成熟,支持异步操作的三方库也很少,那时基本都用 Gevent 库来实现高性能的网络请求,它通过打补丁,以写同步代码的方式,让代码以异步方式运行,使用门槛低。现在异步编程已经很成熟了,比如 Django 都已经支持异步语法了,后端框架 FastAPI 更是异步的代表作,基本已经取代了 Flask (只从技术选型的角度考虑)。

事件循环通常在主线程中运行,并在其线程中执行所有回调和任务。当一个任务在事件循环中运行时,没有其他任务可以在同一个线程中运行,即同一时刻线程中只有一个任务在运行。当一个任务执行一个 await 表达式时,正在运行的任务被挂起,事件循环执行下一个任务。 总结一句话就是:事件循环在单线程中处理多个任务。

注意:如果要处理信号和执行子进程,事件循环必须运行于主线程中。

多线程切换存在上下文切换的系统开销,而协程运行在用户空间,不涉及系统切换,切换开销会小很多,且协程在等待IO时不占用线程资源,所以在网络请求等IO操作方面,协程比线程更胜一筹。你可以这样理解,一个进程中可以运行多个线程,一个线程中又可以运行很多个协程。