在发布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)