import time
import asyncio
async
defcountdown
(number,n)
:while n >0:
print
('t-minus'
, n,
'({})'
.format
(number)
)await asyncio.sleep(1)
n -=
1#方式一
# start = time.time()
# loop = asyncio.get_event_loop()
# tasks = [
# asyncio.ensure_future(countdown('a', 2)),
# asyncio.ensure_future(countdown('b', 3))
# ]
## loop.run_until_complete(asyncio.wait(tasks))
def
run():
loop = asyncio.get_event_loop(
)# tasks = [
# asyncio.ensure_future(countdown('a', 2)),
# asyncio.ensure_future(countdown('b', 3))
# ]# 下面這種建立任務的形式等同於上面的tasks 即,asyncio.ensure_future 與 loop.create_tasks相等
tasks =
[ loop.create_task(countdown(
'a',2)
),loop.create_task(countdown(
'b',3)
)]loop.run_until_complete(asyncio.wait(tasks)
) loop.close(
)if __name__ ==
'__main__'
:
run(
)
協程的使用,也是針對任務,即函式功能而言。對一些阻塞的函式,可以使用協程併發方式,提高效率。併發必須註冊函式,即使用create_tasks, 或ensure_future ,不用不會有併發。協程的優點就是,完全由使用者自己控制,這一點不像執行緒,執行緒開啟,執行怎麼樣是不受使用者控制的。同樣,不耗資源,至始至終,都是乙個執行緒在執行 Python協程 三 Asyncio執行
asyncio.run coro,debug false 執行 coroutine coro 並返回結果。此函式執行傳入的協程,負責管理 asyncio 事件迴圈並完結非同步生成器。當有其他 asyncio 事件迴圈在同一執行緒中執行時,此函式不能被呼叫。如果 debug 為true,事件迴圈將以除...
python協程與非同步協程
在前面幾個部落格中我們一一對應解決了消費者消費的速度跟不上生產者,浪費我們大量的時間去等待的問題,在這裡,針對業務邏輯比較耗時間的問題,我們還有除了多程序之外更優的解決方式,那就是協程和非同步協程。在引入這個概念之前我們先看 看這個圖 從這個我們可以看出來,假如來了9個任務,即使我們開了多程序,在業...
python協程使用 協程的案例
概念 使用者層面在乙個執行緒中進行多工切換的機制,比執行緒更加輕量級 實現併發量更大 協程的使用 使用第三方庫 gevent gevent 是乙個基於協程的 python 網路庫,在遇到 io 阻塞時,程式會自動進行切換,可以讓我們用同步的放肆寫非同步 io 協程的使用 from gevent im...