Python 协程的两种核心实现:生成器与原生协程对比
在 Python 中,协程(Coroutine)是一种轻量级的并发编程方式,通过协作式多任务来实现高效的并发执行。协程允许程序在单线程内并发处理多个任务,而无需承担多线程上下文切换和锁机制带来的开销。
什么是协程
协程是一种特殊的函数,它可以在执行过程中暂停并保存当前状态,稍后从暂停处恢复执行。这种机制使得协程非常适合处理 I/O 密集型任务,如网络请求、文件读写等。
相比于线程和进程,协程具有以下显著优点:
- 轻量级:协程的上下文切换成本极小,可以在单线程内并发执行大量的协程,内存占用远低于线程。
- 低延迟:协程的执行过程没有线程切换的开销,也没有加锁解锁的开销,能够更快地响应外部事件。
- 高效性:协程的代码通常比多线程和多进程的代码更加简洁和可读,维护成本更低。
协程的典型使用场景包括网络编程、异步 I/O、数据流处理、高并发任务调度等。
生成器协程
在 Python 3.4 之前,协程主要通过生成器函数来实现,称为'生成器协程'。生成器函数是一种特殊的函数,其返回一个生成器对象,可以通过 yield 语句暂停函数的执行,然后在下一次调用生成器对象的 next() 方法或 send() 方法时继续执行。
示例代码
import asyncio
def coroutine():
print('Coroutine started')
while True:
result = yield
print('Coroutine received:', result)
async def main():
print('Main started')
c = coroutine()
next(c) # 启动生成器,执行到第一个 yield
c.send('Hello') # 发送消息并恢复执行
await asyncio.sleep(1) # 等待 1 秒
c.send('World') # 再次发送消息
print('Main finished')
asyncio.run(main())
执行流程分析
main函数开始执行,打印出Main started。- 创建生成器对象
c,调用 使其执行到第一个 语句处暂停。


