asyncio

作者: 周周周__ | 来源:发表于2020-04-01 14:31 被阅读0次

    一、背景

    asyncio是python3.4后推出的新的并发模块,主要是用coroutines和futures来简单的实现异步的功能,并且使用 的是同步的代码实现异步的功能,还没有回调的方法。
    在后来3.7版本后升级了api的方法,主要是对task以及event loops的方法的升级。
    现在来说,由于异步需要配合相对应的异步库来进行调用,可能生态会有不完善的地方。

    二、几个重要的对象

    • event loops:主要是实现了一个循环监听的机制,我们可以将task注册到上边。
    • coroutines: 协成对象,是与python生成器类似的函数,需要用关键字async进行声明,同时在函内有关键字await,当coroutines执行到await的时候,会将控制权交给event loop。
    • futures:代表将来执行或者没有执行的任务的结果,这个结果也可能是异常。

    三、同步和异步

    在协成中,asyncio让我们把任务定义为coroutiness,允许我们自己进行调度

    举例1:
    import asyncio
    async def foo():
        print("running in foo")
        await asyncio.sleep(0)
        print("back foo")
    async def bar():
        print("running in bar")
        await asyncio.sleep(0)
        print("back bar")
    async def main():
        tasks = [foo(), bar()]
        await asyncio.gather(*tasks)  # 这里是创建task,是一个未执行的futures对象。
    asyncio.run(main())
    

    执行结果:

    running in foo
    running in bar
    back foo
    back bar
    

    执行说明:
    1、await是用来将控制权交出,让其他协成执行的关键字
    2、sleep这里使用的是asyncio.sleep是因为在协程对象中这是模拟阻塞用的睡眠(time.sleep是阻塞整个线程)。用sleep(0)是为了让其他协成进行运行。
    3、最后的run方法是py37+版本中,我们不用进行创建事件循环命令,run都创建好了

    相关文章

      网友评论

          本文标题:asyncio

          本文链接:https://www.haomeiwen.com/subject/uzaiuhtx.html