作為我的問題的一個例子,我正在構建一個使用web3.py庫的應用程式。這個庫只能同步作業,但我要求我的應用程式是異步的。
web3.py 開發人員實際上正在努力將異步功能構建到庫中,但這需要一些時間。同時,我所做的是使用asyncer.asyncify()來包裝我需要的任何 web3.py 同步功能,以使它們在我的應用程式中異步作業,因此,我相信我的 web3.py 可以正常作業異步。
這讓我開始思考——庫的作者撰寫本機異步函式有什么區別,而不是僅僅將所有現有的同步函式包裝在 Asyncer 之類的東西中?會有性能差異嗎?
換句話說,當他們可以使用像 Asyncer 這樣的包裝函式/裝飾器并在大約 1 天的作業中將整個庫轉換為異步實作時,他們為什么還要花這么多時間將他們的庫的同步實作轉換為異步?
uj5u.com熱心網友回復:
我想說理想情況下,異步代碼應該只對 IO-bound 任務使用異步方式。在這種情況下,一切都將在一個執行緒中運行。
在您提供的示例中,在后臺asyncer使用執行緒池執行。這給啟動、切換執行緒和傳遞引數(使用佇列)帶來了一定的成本。
作為臨時或折衷的解決方案,這可能是合適的。但是如果我們想為一個 IO-bound 的解決方案獲得更高的性能,最好使用異步工具。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/462285.html
