創建一個 add
function ,讓每次 append
數字前先等待一秒。
import asyncio
async def add(i):
await asyncio.sleep(1)
l.append(i)
透過協程來執行,用 tqdm 跑進度條
import time
from tqdm.asyncio import tqdm
l = []
async def main():
print(f"started at {time.strftime('%X')}")
tasks = [asyncio.create_task(add(i)) for i in range(30)]
async for task in (pbar := tqdm(tasks)):
pbar.refresh()
await task
print(f"finished at {time.strftime('%X')}")
await main()
print(l)
在 jupyter上跑的結果
發現 l
的順序並沒有因為非同步的關係而打亂
但若是將等待的時間設為依照添加數字而變化(除3後的餘數)
async def add(i):
await asyncio.sleep(i%3)
l.append(i)
則 l
的順序會依照等待的時間排序,等待時間短的會在前面,因為先執行完的關係。