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