Skip to main content

Command Palette

Search for a command to run...

如何在 Jupyter Notebook 跑 Python 異步程式

在 Jupyter Notebook 跑異步函式就是那麼輕鬆寫意。

Published
•1 min read•View as Markdown
如何在 Jupyter Notebook 跑 Python 異步程式

異步是 Python 3.4 起引入的重大變革,透過 asyncio 模組與新的 async、await 語法達到與 JavaScript 類似的異步執行效果。

一個最簡單的異步程式例子:

import asyncio

async def do_something():
    await asyncio.sleep(1)

loop = asyncio.get_event_loop()
loop.run_until_complete(do_something())

在上面的例子內有幾個 Python 異步程式的特徵:

  • 由 async 關鍵字定義 do_something() 為異步函式。
  • 函式內有 await 關鍵字的敘述句表示該敘述可為異步執行。
  • await 後呼叫的函式 asyncio.sleep() 為一個具有 awaitable 的函式,對 await 關鍵字來說,後面呼叫的函式有 awaitable 屬性是必須的,否則會引發錯誤。
  • 取得一個 event loop 物件,並令此 event loop 物件去執行 do_something()。

Event loop 物件可以接受一系列的 async 函式,並互相調度,在上面的例子中,因為只有單個任務,所以用異步顯得脫褲子放屁,在真實的場景中,event loop 接受多個 async 函式後,當遇到第一個函式的 await,異步機制就會開始作用,讓第一個函式的 await 繼續跑,並開始讓下一個函式也跑起來,以此類推直到所有 event loop 內的異步函式都跑完。

當在 Jupyter Notebook 裡跑異步程式

在 Jupyter Notebook 內可以直接使用 await 語法呼叫異步函式:

import asyncio

await asyncio.sleep(1)

就這麼簡單。

More from this blog

解讀 ads.txt 的重導規則

先認識一下 ads.txt: 最單純的作法就是把 ads.txt 放到 example.com/ads.txt,然而在我這邊,同樣拿 example.com 為例,我的 example.com 與 www.example.com 都沒有真正的主機,全都是轉址到 blog.example.com,像這樣的例子,不太可能為了放一個 ads.txt 的檔案再去開一個空間,最好是也能用轉址的模式去讀 blog.example.com/ads.txt,AdSense 的說明也有提到這種狀況,節錄如下: ...

Mar 7, 20221 min read37
解讀 ads.txt 的重導規則

Leon's Blog

15 posts

Most articles are posted in my personal site: https://editor.leonh.space/