Python中的协程是一种轻量级的线程,又称微线程。它能够暂停和恢复执行,并与其他协程共享资源。
协程的优点是:
1、 高并发性:一个CPU可以运行很多协程,并且切换代价低。
2、 无需线程上下文切换的开销:协程的切换更加轻量。
3、 共享数据简单:协程之间可以简单地共享数据,无需像线程那样用锁来同步。
在Python中,我们可以使用yield
关键字实现协程,或者使用asyncio
模块开发协程。
1、 yield实现协程:
def coroutine1():
print('coroutine1 printed')
yield
print('coroutine1 resumed')
def coroutine2():
print('coroutine2 printed')
yield
print('coroutine2 resumed')
# 协程只是定义,还未执行
c1 = coroutine1()
c2 = coroutine2()
# 协程第一次执行到yield暂停
next(c1)
next(c2)
# 再次调用时从暂停处继续执行
next(c1)
next(c2)
输出:
coroutine1 printed
coroutine2 printed
coroutine1 resumed
coroutine2 resumed
2、 asyncio实现协程:
import asyncio
async def coroutine1():
print('coroutine1 printed')
await asyncio、sleep(1)
print('coroutine1 resumed')
async def coroutine2():
print('coroutine2 printed')
await asyncio、sleep(2)
print('coroutine2 resumed')
asyncio、run(asyncio、gather(coroutine1(), coroutine2()))
输出:
coroutine1 printed
coroutine2 printed
coroutine1 resumed
coroutine2 resumed