python中的异步操作

本篇主要是讨论的是python中的asyncio,不是多线程,同时也不是多进程,更加不是多核运行,asyncio 是单核心、单进程、单线程下的操作。

核心概念

  • event loop: 事件循环
    可以理解为一个列表,列表里面放着很多个待完成的事件,又称为可等待对象
  • 可等待对象
    可等待对象就是event loop 里面需要执行的对象,通过await进行等待。这个对象可以是协程, 任务 和 Future。
  • 协程
    凡是在函数前面写了 async 都叫协程。
    #这就是协程
    async def hello():
        return 0
    
  • 任务
    Task可以通过async.create_task()函数创建,而这个参数的输入为一个协程。
  • Future
    Future 是一种特殊的 低层级 可等待对象,表示一个异步操作的 最终结果

概念关系

以下均为个人理解

一个可等待对象可以有就绪等待两种状态;

  1. event loop查看各个可等待对象的状态,当对象处于就绪状态时,event loop 交出cpu控制权,可等待对象拿到控制权。
  2. 可等待对象执行,进入可等待对象的cpu运行阶段。
    • 当遇到将对象设置为等待状态的程序语句时,返回event loop,记录可等待对象的当前运行位置。
    • 当可执行对象程序完成时,event loop将可等待对象移除event列表。
  3. 重复进行1、2操作,直到可等待对象全部进入等待状态或者移除event列表,此时的event loop不断循环,cpu被其占据。

理论上来说,这时候应该是死循环,因为cpu都被event loop占据,都没时间去运行可执行对象,可执行对象停止运行的状态下又无法修改可等待对象的等待状态。

所以,一定是存在外援,外援将可等待对象的等待状态修改为就绪状态,这样event loop再次进入可等待对象,重复1、2。

而这个外援是谁嘞?我不清楚,但是一般在IO情况下它会出现,比如获取网页和读取硬盘数据。


来尝试讲故事来描述吧!

打工人张三一个人负责村上的所有小作坊的工作,有5家面馆、2家照相馆和1所衣服加工厂。

之前张三是这么干活的,来到面馆,和面30分钟,拉面10分钟,烧水30分钟,煮面10分钟,端上桌子5分钟,一趟下来85分钟,干完这家去下一家面馆继续干。因此,光是面馆就要做425分钟。

来到照相馆,照相馆要求一天必须至少拍3个人,但是有时候人来的早,有时候人来的迟,照一张相很快啊,就10分钟,三个人总共就30分钟,但是等的时间长啊,一般要等120分钟,所以两家照相馆一共要花300分钟。

还有一家衣服加工厂,这里需要做10件衣服,张三是熟练工,大概10分钟一件,所以100分钟就做完了。

打工人张三一天需要整整工作825分钟,非常辛苦。

但是,有一天来了一个好心人小福,他和张三说:“我来帮帮你吧,但是我只会一些简单的活。就会看看时间,看看有没有人来什么的,其他的我都不会。”

新的一天开始了,张三刚出门就发现,8个店铺门外都挂了各个牌子,上面写着“加油吧,打工人!”,张三好奇地进面馆去和面、拉面,打算烧水,刚烧上水,小福说:“三哥,这边我来看着,你先去别的面馆吧!”,并且出去把门外的牌子翻了个面,上面写着“打工人,打工魂,打工都是人上人!”。

就这样,张三去了下一个面馆,牌子上写着“加油吧,打工人!”,张三就这样进去依旧和面、拉面,等烧水的时候,小福又出来了,“大哥,这边我看着,你再出去看看”。张三只得摸摸脑袋出来了,“这是在干么?”。张三回头一看这面馆的牌子又翻面了:“打工人,打工魂,打工都是人上人!”

张三再活动活动脑袋,突然发现第一个面馆的牌子又给转回来了“加油吧,打工人!”。张三进去一看,小福居然在面馆里面,张三不由得疑惑道:“你不是在那边么?”小福笑道:“害,过来一会了,这水都烧开10分钟了,下面吧”,张三顾不得其他,开始下面,当把手上两缕面给放到锅里,小福又催促着让张三出去了,并把门外牌子翻了个面。

就这样,每次需要烧水、煮面的时候,小福就会冒出来,让张三出去,并把牌子翻面为“打工人,打工魂,打工都是人上人!”。张三也不断找着“加油吧,打工人!”的牌子的店面,这样的店面里面小福才不让他出去。

就这样,一天工作下来,所有任务完成临天黑还有一段时间。张三同时感叹道:“要不是小福,今天还得在照相馆无所事事两个小时,小福帮我看着有没有人来,我直接就去拍照了,真方便!”

小福帮张三节约了大量时间,为了感谢小福,张三在得知小福是工地承包商,又去小福的工地帮忙砌墙,好心人小福当然不好意思让张三白白干活,也给张三一些报酬。

就这样,张三由于过度劳累,因身体不适提前下岗了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容