Python3 异步IO--async/

发布时间:2019-09-26 07:32:38编辑:auto阅读(1722)

    Python3 异步IO--async/await

    asyncio提供的@asyncio.coroutine可以把一个generator标记为coroutine类型,然后在coroutine内部用yield from调用另一个coroutine实现异步操作。
    为了简化并更好地标识异步IO,从Python 3.5开始引入了新的语法asyncawait,可以让coroutine的代码更简洁易读。
    请注意,asyncawait是针对coroutine的新语法,要使用新的语法,只需要做两步简单的替换:

    把@asyncio.coroutine替换为async;
    把yield from替换为await。

    让我们对比一下上一节(Python3 异步--asyncio)的代码:

    @asyncio.coroutine
    def hello():
        print("Hello world!")
        r = yield from asyncio.sleep(1)
        print("Hello again!")

    用新语法重新编写如下:

    async def hello():
        print("Hello world!")
        r = await asyncio.sleep(1)
        print("Hello again!")

    小结

    Python从3.5版本开始为asyncio提供了async和await的新语法;
    注意新语法只能用在Python 3.5以及后续版本,如果使用3.4版本,则仍需使用上一节的方案。
    上节(python3 异步--asyncio)代码重写:

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    import threading
    import asyncio
    
    async def hello():
        print('Hello world! (%s)' % threading.currentThread())
        await asyncio.sleep(1)
        print('Hello again! (%s)' % threading.currentThread())
    
    loop = asyncio.get_event_loop()
    tasks = [hello(), hello()]
    loop.run_until_complete(asyncio.wait(tasks))
    loop.close()

    本文转自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00144661533005329786387b5684be385062a121e834ac7000

关键字