在发布Python 3.5+之前,该asyncio模块使用生成器来模仿异步调用,因此其语法与当前的Python 3.5版本不同。
Python 3.5引入了asyncandawait关键字。请注意在调用周围没有括号。await func()
import asyncio async def main(): print(await func()) async def func(): # 做时间密集的东西... return "Hello, world!" if __name__ == "__main__": loop = asyncio.get_event_loop() loop.run_until_complete(main())
在Python 3.5之前,@asyncio.coroutine装饰器用于定义协程。表达式的产量用于生成器委派。注意圆括号。yield from func()
import asyncio @asyncio.coroutine def main(): print((yield from func())) @asyncio.coroutine def func(): # 做时间密集的东西。 return "Hello, world!" if __name__ == "__main__": loop = asyncio.get_event_loop() loop.run_until_complete(main())
这是一个示例,显示了两个函数如何异步运行:
import asyncio
async def cor1():
print("cor1 start")
for i in range(10):
await asyncio.sleep(1.5)
print("cor1", i)
async def cor2():
print("cor2 start")
for i in range(15):
await asyncio.sleep(1)
print("cor2", i)
loop = asyncio.get_event_loop()
cors = asyncio.wait([cor1(), cor2()])
loop.run_until_complete(cors)