iT邦幫忙

0

Python Async 有趣的結果

  • 分享至 

  • xImage
  •  

創建一個 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上跑的結果
https://ithelp.ithome.com.tw/upload/images/20220715/20118571DAlPsNpYCH.png
發現 l 的順序並沒有因為非同步的關係而打亂

但若是將等待的時間設為依照添加數字而變化(除3後的餘數)

async def add(i):
    await asyncio.sleep(i%3)
    l.append(i)

https://ithelp.ithome.com.tw/upload/images/20220715/201185719cFeFh2NlD.png
l 的順序會依照等待的時間排序,等待時間短的會在前面,因為先執行完的關係。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言