从头造轮子:python3 asyncio之 run_until_complete (1)

今天开始聊一聊python3的asyncio。关于asyncio,大家肯定都有自己的理解,并且网上大神也把基础概念也解释的比较透彻。
本文写作的初衷,主要是理解asyncio的原理并且实现一遍。
话不多说,我们开始!

一、知识准备

● 理解进程、线程、协程。简单来说,这三个都是为了解决多任务同时进行的问题
  1)进程是操作资源分配的最小单位,多任务的实现主要是极快地在进程间来回切换,而进程切换消耗时间最长(系统调用)
  2)线程依赖于进程,多个线程共享了父进程的一部分资源,线程切换时间相对于进程来说消耗时间大大减少,但是由于python gil的存在,并不存在多线程(系统调用)
  3)协程依赖于线程,由于进程/线程切换都是系统调用,开销是巨大的。而协程是在用户空间内完成任务切换,不会切换到操作系统资源(寄存器、信号量、堆栈等),所以这种方式开销最小。python的协程核心在于,遇到等待事件,就交出cpu控制权,转而让其他协程执行

● 理解python生成器,yield/yield from
  这里就不班门弄斧了,直接推荐大佬的blog

● 理解关键字async/await,async/await是3.5之后的语法,和yield/yield from异曲同工 。最后,如果你的时间不是很紧张,并且又想快速的python提高,最重要的是不怕吃苦,建议你可以架尉♥信(同音):276 3177 065 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~

二、环境准备

|

组件

|

版本

|
|

python

|

3.7.7

|

三、run_until_complete的实现

先来看下官方asyncio的使用方法:

|># more main.pyimport asyncioasync def hello():    
print('enter hello ...')    
return 'world'if __name__ == "__main__":    
loop = asyncio.get_event_loop()    
task = loop.create_task(hello())    
rst = loop.run_until_complete(task)    
print(rst)    |>
# python3 main.pyenter hello ...world

来看下造的轮子的使用方式:

▶ more main.pyfrom wilsonasyncio import get_event_loopasync def hello():    
print('enter hello ...')    
return 'world'if __name__ == "__main__":    
loop = get_event_loop()    
task = loop.create_task(hello())    
rst = loop.run_until_complete
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值