使用yield语句创建的生成器对象可以用于实现一种简单的协程。在使用yield时需要调用生成器的send()方法将值发送给生成器,这个值也将作为yield表达式的结果返回。
示例代码:
def coroutine_example():
while True:
value = yield
print('Got value:', value)
c = coroutine_example()
next(c) # 启动生成器
c.send('hello') # 发送一个值给生成器
c.send('world')
在Python 3.5版本之后,引入了async/await语法,让实现协程变得更加方便。将协程函数通过async关键字进行修饰,在协程函数中可以使用await语句避免显式调用send()方法。
示例代码:
import asyncio
async def coroutine_example():
while True:
value = await asyncio.sleep(1)
print('Got value:', value)
loop = asyncio.get_event_loop()
loop.run_until_complete(coroutine_example())
Python中有很多协程库可以用来简化协程的实现,其中比较常用的有asyncio、curio和trio等。这些库提供了更高级别的API,可以简化协程的创建和管理。
示例代码:
import curio
async def coroutine_example():
while True:
value = await curio.sleep(1)
print('Got value:', value)
curio.run(coroutine_example)