協(xié)程的工作流程還是挺重要的赊琳,能夠讓我們理解每一步代碼的含義。
1.定義/創(chuàng)建協(xié)程對象: async / @asyncio.coroutine
2.定義事件循環(huán)對象容器: loop = asyncio.get_event_loop()
3.將協(xié)程對象轉(zhuǎn)化為task任務(wù)(兩種方式):
3.1 task = loop.create_task(協(xié)程對象), 這種是單個task對象砰碴,對應(yīng)4.1的操作躏筏;
3.2 task = asyncio.ensure_future(協(xié)程對象), tasks = [task, task...]
這種是多個task對象呈枉,對應(yīng)4.2 的操作趁尼。
4.將任務(wù)扔進事件循環(huán)容器并觸發(fā):
4.1 loop.run_until_complete(task)
4.2 多task對象的觸發(fā)有兩種方式:
loop.run_until_complete(asyncio.wait(tasks))
loop.run_until_complete(asyncio.gather(*tasks))
asyncio.gather 和 asyncio.wait 區(qū)別:
他們主要是返回值不一樣。
async.wait會返回兩個值: done和pending猖辫。done為已完成的協(xié)程Task酥泞,pending為超時未完成的協(xié)程Task,需通過future.result調(diào)用Task的result啃憎。
async.gather返回的是已完成Task的result(報錯的也會被認為是成功的任務(wù), 一個取消全部取消)
「Python異步編程-1」總覽全局
「Python異步編程-2」可迭代對象芝囤、迭代器、生成器
「Python異步編程-3」協(xié)程辛萍、生成器悯姊、yield 的聯(lián)系
「Python異步編程-4」-協(xié)程的工作流程