【💊 Python的解憂錦囊】time.sleep與asyncio.sleep的不同

更新於 發佈於 閱讀時間約 3 分鐘

看到標題的朋友可能會覺得奇怪, 我們常常看到的不就是time.sleep嗎? 怎麼又多出了asyncio.sleep呢? 這兩者究竟差異在哪邊呢?

我們都知道sleep就是睡眠的意思, 那麼在程式的運作上就是等待, 等待一段時間之後繼續完成任務, time.sleep的部份很好理解, 就是在該段程式碼的地方等待, 直到時間結束繼續往下做, 而這會是一個阻塞的行為, 假設有多個任務需要切換時會較為不利。

而asyncio.sleep則是用於非同步的設計方式, 關於非同步的知識歡迎參考「【Python - asyncio】非同步 I/O 簡介」, 它可以讓我們在某個點等待一段時間, 讓事件處理循環先處理其他任務後再切回原任務繼續執行, 讓我們感覺起來具有連貫性, 但其實背後是一連串有效率的資源應用功能。

asyncio.sleep與time.sleep兩者之間的差異可見下圖:

raw-image


這就是非同步程式的一個魅力之一, 讓我們不會因為一個等待而導致後面的塞車, 進而發揮了單一執行緒的最佳資源使用效用。

重點

來看看下面這段程式碼, 我們創造了兩個任務,每個任務都會執行一段無窮迴圈, 並印出各自任務的號碼, 那麼假設我們照著流程執行時, 會發現到只印出「1」…


import asyncio

async def job(num: int):
while True:
print(f"{num}")

async def main():
task1 = asyncio.create_task(job(1))
task2 = asyncio.create_task(job(2))

await asyncio.gather(task1, task2)

asyncio.run(main())

我們來看看印出後的結果…

1
1
1
1
1
1
1

但其實我們希望兩個任務是互相切換的, 因此我們可以加上asyncio.sleep來讓兩個任務之間產生出一個間隙,就像這樣:


import asyncio

async def job(num: int):
while True:
await asyncio.sleep(0.001)
print(f"{num}")

async def main():
task1 = asyncio.create_task(job(1))
task2 = asyncio.create_task(job(2))

await asyncio.gather(task1, task2)

asyncio.run(main())

我們可以看到兩者之間就能夠切換著執行了…

1
2
1
2
1
2
1
2
1
2
1
2

結語

同樣都是sleep, 卻有不同的作用, 每項功能被設計出來都是有其意義的, 因此我們只要好好的掌握這些技巧, 就能夠將程式發揮的淋漓盡致。

留言
avatar-img
留言分享你的想法!
avatar-img
阿Han的沙龍
129會員
287內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
阿Han的沙龍的其他內容
2025/04/23
我們在「【🤖 cursor AI】如何在ubuntu 24.04安裝」有分享如何在Ubuntu安裝cursro這套AI編輯器, 使用起來大幅度的提昇開發效率, 但仍有些問題點需要克服, 比如說: LLM壓根不知道我們的數據庫長怎樣啊? 怎麼分析結構呢? 假設文檔又不足的狀況下更是艱辛, 如果LLM
Thumbnail
2025/04/23
我們在「【🤖 cursor AI】如何在ubuntu 24.04安裝」有分享如何在Ubuntu安裝cursro這套AI編輯器, 使用起來大幅度的提昇開發效率, 但仍有些問題點需要克服, 比如說: LLM壓根不知道我們的數據庫長怎樣啊? 怎麼分析結構呢? 假設文檔又不足的狀況下更是艱辛, 如果LLM
Thumbnail
2025/04/16
精彩回顧 【語音合成技術 - GPT-SoVITS】讓機器說人話的語音生成服務 【語音合成技術 - GPT-SoVITS】如何架設API伺服器 【語音合成技術 - GPT-SoVITS】如何微調模型 建議先閱讀我們的 【語音合成技術 - GPT-SoVITS】讓機器說人話的語音生成服務
Thumbnail
2025/04/16
精彩回顧 【語音合成技術 - GPT-SoVITS】讓機器說人話的語音生成服務 【語音合成技術 - GPT-SoVITS】如何架設API伺服器 【語音合成技術 - GPT-SoVITS】如何微調模型 建議先閱讀我們的 【語音合成技術 - GPT-SoVITS】讓機器說人話的語音生成服務
Thumbnail
2025/04/09
我們在「【⚡ Cache伺服器 - Redis】 讓系統服務更加順暢的快取機制」 分享如何使用Docker架設Redis, 在進入此篇章之前也請您親自架設一遍, 這樣才能加深學習的效果, 接下來我們會使用Python這套程式語言進行示範與說明, 讓我們以實戰的方式來練習, 將技術內化為知識, 達到真
Thumbnail
2025/04/09
我們在「【⚡ Cache伺服器 - Redis】 讓系統服務更加順暢的快取機制」 分享如何使用Docker架設Redis, 在進入此篇章之前也請您親自架設一遍, 這樣才能加深學習的效果, 接下來我們會使用Python這套程式語言進行示範與說明, 讓我們以實戰的方式來練習, 將技術內化為知識, 達到真
Thumbnail
看更多
你可能也想看
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
晚睡,是沒有勇氣結束今天;那些習以為常的慣性,我們選擇忽略。如果這些思維像是植物一樣,由內心為出發而成長著,那我們如何改變這些深根蒂固的思維?
Thumbnail
晚睡,是沒有勇氣結束今天;那些習以為常的慣性,我們選擇忽略。如果這些思維像是植物一樣,由內心為出發而成長著,那我們如何改變這些深根蒂固的思維?
Thumbnail
有一堆文章影片說,人一定要睡滿 7-8 小時,否則就會早死,但又有一堆成功人士分享自己一天只睡 3-6 小時,好像不睡這麼少就成功不了一樣。到底要怎麼睡,才能兼顧健康和成功呢 ? 今天就來聊聊這個話題吧!
Thumbnail
有一堆文章影片說,人一定要睡滿 7-8 小時,否則就會早死,但又有一堆成功人士分享自己一天只睡 3-6 小時,好像不睡這麼少就成功不了一樣。到底要怎麼睡,才能兼顧健康和成功呢 ? 今天就來聊聊這個話題吧!
Thumbnail
我們呼呼大睡的時候,身體其實忙著幫你修復升級 ? 睡眠不但真的有深淺眠之分,而且還會不斷交替 ? 淺眠、 深眠和做夢其實對身體都超級有用 ? 少睡一些,體內的工作做不完,真的會累積出問題 ? 今天就讓我們來聊聊,睡覺的時候身體都在做些什麼吧 !
Thumbnail
我們呼呼大睡的時候,身體其實忙著幫你修復升級 ? 睡眠不但真的有深淺眠之分,而且還會不斷交替 ? 淺眠、 深眠和做夢其實對身體都超級有用 ? 少睡一些,體內的工作做不完,真的會累積出問題 ? 今天就讓我們來聊聊,睡覺的時候身體都在做些什麼吧 !
Thumbnail
看到標題的朋友可能會覺得奇怪, 我們常常看到的不就是time.sleep嗎? 怎麼又多出了asyncio.sleep呢? 這兩者究竟差異在哪邊呢? 我們都知道sleep就是睡眠的意思, 那麼在程式的運作上就是等待, 等待一段時間之後繼續完成任務, time.sleep的部份很好理解, 就是在該段程
Thumbnail
看到標題的朋友可能會覺得奇怪, 我們常常看到的不就是time.sleep嗎? 怎麼又多出了asyncio.sleep呢? 這兩者究竟差異在哪邊呢? 我們都知道sleep就是睡眠的意思, 那麼在程式的運作上就是等待, 等待一段時間之後繼續完成任務, time.sleep的部份很好理解, 就是在該段程
Thumbnail
在床上無法入眠的情況下,人們常常會開始思索各種問題,希望找到可行的解決方案。時間一分一秒過去,讓人感覺已經過了很久。為了避免一再被折騰,有些人會採取報復性的行動。
Thumbnail
在床上無法入眠的情況下,人們常常會開始思索各種問題,希望找到可行的解決方案。時間一分一秒過去,讓人感覺已經過了很久。為了避免一再被折騰,有些人會採取報復性的行動。
Thumbnail
你是不想睡,還是害怕起床? 在床上翻來覆去睡不著的時候,我的腦中突然冒出這個問題,有時我們拖延睡眠是由於工作和生活的夾擊,讓我們感覺缺乏能夠自主控制的時間。然而,長期的拖延睡眠會導致身體慢性發炎疲勞、心理憂鬱不快樂。本文將分享從《更快樂的1小時》一書中學習的方法,希望能對為睡眠所苦的你有所幫助。
Thumbnail
你是不想睡,還是害怕起床? 在床上翻來覆去睡不著的時候,我的腦中突然冒出這個問題,有時我們拖延睡眠是由於工作和生活的夾擊,讓我們感覺缺乏能夠自主控制的時間。然而,長期的拖延睡眠會導致身體慢性發炎疲勞、心理憂鬱不快樂。本文將分享從《更快樂的1小時》一書中學習的方法,希望能對為睡眠所苦的你有所幫助。
Thumbnail
你知道嗎?睡眠不只是讓我們休息,還能提升免疫力、維護心理健康,讓我們在白天精神飽滿!😊
Thumbnail
你知道嗎?睡眠不只是讓我們休息,還能提升免疫力、維護心理健康,讓我們在白天精神飽滿!😊
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News