asyncio call_at,call_soon和call_later用法
生活随笔
收集整理的這篇文章主要介紹了
asyncio call_at,call_soon和call_later用法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
# coding=utf-8import asyncio
import functools
import logginglogging.basicConfig(level=logging.INFO,format="%(asctime)s [*] %(process)d %(processName)s %(message)s"
)def callback01 (args, *, kwargs="defalut"):print(f"\t普通函數做為回調函數,獲取參數:{args},{kwargs}")def callback02 (n):print(f"\t callback02 {n} invoked")def callback03 (n, loop):print(f"\t callback03 {n} 運行時間點{loop.time()}")async def result1 ():print("\t這是result1協程")return "result1"async def result2 (arg):print("\t這是result2協程")return f"result2接收了一個參數,{arg}"async def main (loop):print("1.主協程------------------------------------------------")print("\t等待result1協程運行")res1 = await result1() # 異步阻塞(等待另一個協程)print("\t等待result2協程運行")res2 = await result2(res1) # 異步阻塞(等待另一個協程)await asyncio.sleep(1)print("2.注冊callback01----------------------------------------")loop.call_soon(callback01, 1)# 改變函數的默認參數wrapped = functools.partial(callback01, kwargs="not defalut")loop.call_soon(wrapped, 2)await asyncio.sleep(0.1)print("3.注冊callback02----------------------------------------")loop.call_later(0.2, callback02, 1) # 延時去調用一個函數loop.call_later(0.1, callback02, 2) # 第一個參數越小,越先執行。loop.call_soon(callback02, 3) # 會在call_later之前執行,和它的位置在哪無關await asyncio.sleep(1)print("4.注冊callback03----------------------------------------")now = loop.time()print("\t 當前的內部時間(循環時間):", now)loop.call_at(now + 0.1, callback03, 1, loop) # 第一個參數的含義代表的是一個單調時間loop.call_at(now + 0.2, callback03, 2, loop)loop.call_soon(callback03, 3, loop)await asyncio.sleep(1)return (res1, res2)if __name__ == '__main__':loop = asyncio.get_event_loop()try:print("進入事件循環...")result = loop.run_until_complete(main(loop))print(f"獲取返回值:{result}")finally:print("關閉事件循環...")loop.close()
輸出:
進入事件循環... 1.主協程------------------------------------------------等待result1協程運行這是result1協程等待result2協程運行這是result2協程 2.注冊callback01----------------------------------------普通函數做為回調函數,獲取參數:1,defalut普通函數做為回調函數,獲取參數:2,not defalut 3.注冊callback02----------------------------------------callback02 3 invokedcallback02 2 invokedcallback02 1 invoked 4.注冊callback03----------------------------------------當前的內部時間(循環時間): 363699.437callback03 3 運行時間點363699.437callback03 1 運行時間點363699.546callback03 2 運行時間點363699.625 獲取返回值:('result1', 'result2接收了一個參數,result1') 關閉事件循環...總結
以上是生活随笔為你收集整理的asyncio call_at,call_soon和call_later用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VGA、QVGA、WVGA、HVGA名词
- 下一篇: 什么是IP Core?