python asyncio 協程使用 (一)

來源:互聯網
上載者:User

標籤:線性   結果   網上   work   問題   turn   協程   eve   cio   

由於指令碼需要在完成事件處理後N秒檢查事件處理結果,當執行失敗時再執行另一個事件處理。

想要最小化完成這個功能。同時在第一時間就將執行完畢的結果反饋給介面。

因此想到使用協程。 使用之前先翻閱了一下現有的文檔。以及參考了其他人的代碼。

先改寫成如下的用例:

 1 import asyncio 2  3 async def do_some_work(x): 4     try: 5         return "success" 6     finally: 7         print(‘it can test‘) 8         await asyncio.sleep(3) 9         print(‘Waiting: ‘, x)10 11 12 coroutine = do_some_work(2)13 coroutine2 = do_some_work(3)14 loop = asyncio.get_event_loop()15 # task = asyncio.ensure_future(coroutine)16 task = loop.create_task(coroutine)17 task = loop.create_task(coroutine2)18 loop.run_until_complete(task)

 

與網上講單協程的內容不同。我不用特意關心協程的執行時間。而更加關注幾個方法的使用

因此上面的程式碼封裝含如下內容:

1.建立一個協程的函數。函數內容如下:

  A.函數執行成功後會返回結果

  B.函數首先執行try語句,將return事件註冊

  C.其次執行print,輸出it is test

  D.然後將協程掛起(此處類比掛起,實質上我們是希望執行完成一個return之後結束掉一個協程,運行另一個協程)。掛起時間也可以用傳參來設定

  E.確認等待之後協程繼續執行,因此還有一個print事件,通過x的傳參確認協程最終執行

2.建立兩個協程調用。用來確認asyncio模組實際上是建立了一個協程池(簡單說就是task不會被覆蓋,線性調用方法註冊事件)。每次使用方法調用loop.create_task的時候,將建立一個協程。

 

最後是執行結果:

 

執行結果來看。運行機制並不是如之前想象的一樣(因為只返回了一個success)

因此我們稍微改寫一下上面的代碼

 1 import asyncio 2  3 async def do_some_work(x): 4     try: 5         return "success work" 6     finally: 7         print(‘it can test‘) 8         await asyncio.sleep(3) 9         print(‘Waiting: ‘, x)10 11 async def do_return(x):12     print(‘it can return %s‘ % x)13     return "success return"14 15 coroutine = do_some_work(2)16 coroutine2 = do_return(3)17 loop = asyncio.get_event_loop()18 # task = asyncio.ensure_future(coroutine)19 task = loop.create_task(coroutine2)20 task = loop.create_task(coroutine)21 loop.run_until_complete(task)

 

參考return在Python中的實際做法(try-finally)。說明協程只有一個return。即,最後執行時註冊的那一條。

因此還是需要繼續改寫這個函數。(因為這樣看來,只是簡單解決了非同步IO的問題,保證主進程不阻塞)

python asyncio 協程使用 (一)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.