asyncio
--- 非同步 I/O¶
Hello World!
importasyncioasyncdefmain():print('Hello ...')awaitasyncio.sleep(1)print('... World!')asyncio.run(main())
asyncio 是讓使用者以async/await 語法來編寫並行 (concurrent) 程式碼的函式庫 (library)。
asyncio 作為多個 Python 非同步框架的基礎,在高效能網路與網頁伺服器、資料庫連線函式庫、分散式任務佇列等服務都可以看得到它。
asyncio 往往是個建構 IO 密集型與高階層結構化網路程式碼的完美選擇。
asyncio 提供了一系列高階 API:
並行地運行 Python 協程 (coroutine) 並擁有完整控制權;
執行網路 IO 與 IPC;
透過佇列 (queue) 分配任務;
同步並行程式碼;
此外,還有一些給函式庫與框架 (framework) 開發者的低階 API:
建立與管理event loops(事件迴圈),它提供了能被用於網路、執行子行程、處理作業系統訊號等任務的非同步 API;
使用transports(asyncio 底層傳輸相關類別)來實作高效能協定;
透過 async/await 語法來橋接基於回呼 (callback-based) 的函式庫與程式碼。
適用: not WASI.
此模組在 WebAssembly 平台上不起作用或無法使用。更多資訊請參閱WebAssembly 平台。
asyncio REPL
你能在REPL 中對一個asyncio
的並行情境 (context) 進行實驗:
$ python -m asyncioasyncio REPL ...Use "await" directly instead of "asyncio.run()".Type "help", "copyright", "credits" or "license" for more information.>>>importasyncio>>>awaitasyncio.sleep(10,result='hello')'hello'
Raises anauditing eventcpython.run_stdin
with no arguments.
在 3.12.5 版的變更:(also 3.11.10, 3.10.15, 3.9.20, and 3.8.20)Emits audit events.
在 3.13 版的變更:Uses PyREPL if possible, in which casePYTHONSTARTUP
isalso executed. Emits audit events.
參閱
備註
asyncio 的原始碼可以在Lib/asyncio/ 中找到。