Asyncio

Asyncio

1. Base Event Loop

  • BaseEventLoop類

    不應(yīng)該被直接調(diào)用或被放在第三方包中調(diào)用(使用AEL代替),BEL屬于AbstractEventLoop

  • AbstractEventLoop類

    抽象的基類,非線程安全

1.1 Run an event loop

1.1.1 AbstractEventLoop.run_forever()

會一直運行直到stop()方法觸發(fā)

1.1.2 AbstractEventLoop.run_until_complete(future)

會一直運行直到Future運行結(jié)束,如果是一個協(xié)程對象,就會被ensure_future()來裝飾.

會返回Future的結(jié)果,或者報錯

1.1.3 AbstractEventLoop.is_running()

返回event_loop的運行狀態(tài)

1.1.4 AbstractEventLoop.stop()[3.5.1新增]

會終止run_forever()

在一個合適的時機:

If stop() is called while run_forever() is running, this will run the current batch of callbacks and then exit. Note that callbacks scheduled by callbacks will not run in that case; they will run the next time run_forever() is called.Changed in version 3.5.1.

1.1.5 AbstractEventLoop.is_closed()

3.4.2新增方法 如果event loop被關(guān)閉了 返回True

1.1.6 AbstractEventLoop.close()

徹底關(guān)閉, 這個方法會清除掉executor,并且不會像stop一樣在恰當時機關(guān)閉 而是直接關(guān)閉

不可逆

1.1.7 AbstractEventLoop.shutdown_asyncgens()[coroutine ]

3.6新增方法

try:    
    loop.run_forever()
finally:
    loop.run_until_complete(loop.shutdown_asyncgens()) 

1.2 Calls | 調(diào)用

大部分異步函數(shù)不接受多個參數(shù),所以調(diào)用的時候 用functools.partial偏函數(shù)來裝飾

  • 注意: partial函數(shù)要比lambda表達式要好,因為asyncio包可以識別partial里面的對象并在debug的時候展示,而lambda則不行

1.2.1 AbstractEventLoop.call_soon(callback, *args)

這是一個先進先出的(按注冊順序)隊列

返回asyncio.Handle() 用于控制callback

1.2.2 AbstractEventLoop.call_soon(callback, *args)

和1.2.1一樣 只不過是線程安全的

1.3 Delayed calls | 延時調(diào)用

event loop有他內(nèi)在的時鐘來計算超時[不過 這個延時不能超過一天]

1.3.1 AbstractEventLoop.call_later(delay, callback, *args)

返回asyncio.Handle() 用于控制callback

1.3.2 AbstractEventLoop.call_at(when, callback, *args)

返回asyncio.Handle() 用于控制callback

1.3.3 AbstractEventLoop.time()

返回當前時間,是一個float值(這個是由eventloop的內(nèi)部時鐘給出的)

  • asyncio.sleep()方法也用到了這個eventloop的時鐘

1.4 Futures

1.4.1 AbstractEventLoop.create_future()

創(chuàng)建asyncio.Future對象 這個是在asyncio里面創(chuàng)建Future的推薦方法 3.5.2新增方法

1.5. Tasks

1.5.1 AbstractEventLoop.create_task(coro)

設(shè)定協(xié)程對象的執(zhí)行,用future包裹他,返回一個Task對象

第三方包的event_loop可能有他們自己定義的task,但是必須是Task類的子集

3.4.2新增的

1.5.2 AbstractEventLoop.set_task_factory(factory)

如果factory是None, 就會使用默認的

如果factory是可調(diào)用的,需要有一個(loop,coro)的簽名[loop是當前運行的event_loop,coro是一個協(xié)程對象 這個可以調(diào)用的對象一定要返回一個asyncio.Future對象

3.4.4新增

1.5.3 AbstractEventLoop.get_task_factory()

返回當前的task_factory,如果是默認的task_factory類型,就會返回None

3.4.4新增

1.6 Creating connections

1.6.1 (coroutine) AbstractEventLoop.create_connection(protocol_factory, host=None, port=None, ssl=None, family=0, proto=0, flags=0,sock=None, local_addr=None, server_hostname=None)

1.6.2 (coroutine) AbstractEventLoop.create_datagram_endpoint(protocol_factory, local_addr=None, remote_addr=None, family=0, proto=0, flags=0, reuse_address=None, reuse_port=None, allow_broadcast=None, sock=None)

1.6.3 (coroutine) AbstractEventLoop.create_unix_connection(protocol_factory, path,ssl=None, sock=None, server_hostname=None)

1.7 Creating listening connections

1.7.1 coroutine AbstractEventLoop.create_server(protocol_factory, host=None, port=None,family=socket.AF_UNSPEC, flags=socket.AI_PASSIVE, sock=None, backlog=100, ssl=None, reuse_address=None, reuse_port=None)

1.7.2 coroutine AbstractEventLoop.create_unix_server(protocol_factory, path=None,sock=None, backlog=100, ssl=None)

1.7.3 coroutine BaseEventLoop.connect_accepted_socket(protocol_factory, sock, ssl=None)

1.8 Watch file descriptors

1.8.1 AbstractEventLoop.add_reader(fd, callback, args)

1.8.2 AbstractEventLoop.remove_reader(fd)

1.8.3 AbstractEventLoop.add_writer(fd, callback, args)

1.8.4 AbstractEventLoop.remove_writer(fd)

2. Event loops

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市歉甚,隨后出現(xiàn)的幾起案子勺疼,更是在濱河造成了極大的恐慌堡牡,老刑警劉巖卓鹿,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡氯葬,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門婉陷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帚称,“玉大人,你說我怎么就攤上這事秽澳〈扯茫” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵担神,是天一觀的道長楼吃。 經(jīng)常有香客問我,道長妄讯,這世上最難降的妖魔是什么所刀? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮捞挥,結(jié)果婚禮上浮创,老公的妹妹穿的比我還像新娘。我一直安慰自己砌函,他們只是感情好斩披,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著讹俊,像睡著了一般垦沉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上仍劈,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天厕倍,我揣著相機與錄音,去河邊找鬼贩疙。 笑死讹弯,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的这溅。 我是一名探鬼主播组民,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼悲靴!你這毒婦竟也來了臭胜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎耸三,沒想到半個月后乱陡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡仪壮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年蛋褥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睛驳。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖膜廊,靈堂內(nèi)的尸體忽然破棺而出乏沸,到底是詐尸還是另有隱情,我是刑警寧澤爪瓜,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布蹬跃,位于F島的核電站,受9級特大地震影響铆铆,放射性物質(zhì)發(fā)生泄漏蝶缀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一薄货、第九天 我趴在偏房一處隱蔽的房頂上張望翁都。 院中可真熱鬧,春花似錦谅猾、人聲如沸柄慰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坐搔。三九已至,卻和暖如春敬矩,著一層夾襖步出監(jiān)牢的瞬間概行,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工弧岳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留凳忙,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓禽炬,卻偏偏與公主長得像消略,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子瞎抛,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容