您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Python同步方法怎么變為異步方法”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Python同步方法怎么變為異步方法”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
在我們平時的FastApi工作中,經常會用到一些異步的操作,為了保持一致,我們一般會編寫配套的異步代碼。
但如果我們提供了類似jmeter BeanShell的可執行代碼的功能給用戶,那用戶還能給你編寫異步代碼嗎?那顯然是不可能的事情。
還有一種情況,當我們引入第三方包,比如一些oss的庫,里面天然是同步方法,有內置的requests請求,你想不阻塞整個fastapi服務,也是需要將他們異步化的。
這塊先給我點時間去調研,我暫時還沒有完全玩明白里面的內容。初步的設想是通過loop.run_in_executor執行同步代碼,讓他超乎三界之外,不讓其阻塞事件循環。
由于還不是很確定,所以會在后面理解清楚了補充進來。那就沒有現成的方案嗎?答案是有的,想做這件事情的,不只是我哦!
為此我調研了幾個庫,它們都能很好地解決這個問題。下面我們來一一介紹。
這是大名鼎鼎的FastApi的作者,休閑娛樂的時候寫的一款工具,它不僅可以把同步代碼異步化,還可以把異步代碼同步化,我們來看看介紹。
簡單看下,上面的同步方法(內部用了sleep)在asyncify的包裹下,變成了awaitable的方法,即異步化。不過由于我沒有真實使用,看在作者的面上,給個推薦。
AnyIO.run,因為這個庫基于AnyIO而編寫的(又是個奇怪的知識點),我想應該和asyncio.run差不多療效。
總之,既然作者的介紹是符合我們預期的,我們就推薦一下。
pip install asyncer
這個庫挺不錯的,是一個烏拉老哥寫的。里面充斥著我看不懂的俄語注釋,但我試過功能比較完善,也很容易上手,不信咱們看看:
安裝
pip install awaits
使用
和上面的區別在于,他只是把同步方法裝飾起來,就可以當異步方法用了,是不是非常神奇!
我測試過,療效不錯。因為它也具備異步方法的其他特性,比如取消。具體可以參考下我對下面那個庫介紹的圖片示例代碼。
這個是我接觸過的第一個同步轉異步的庫,為此我還為它提過issue。圖里面是我測試一個同步方法異步化以后,能不能做取消類似的操作。這個是我用來判斷它是否阻塞的一個因素。
最開始我是發現,如果遇到time.sleep
這樣的同步方法,這個方法似乎沒有起到作用,也就是依舊會阻塞,后面這個庫的作者給我答復,大意是重新搞了一下,我可以按照預期去做了。不過我現在還沒有嘗試過,試著閱讀過源碼,無疾而終了。
pip install aioify
讀到這里,這篇“Python同步方法怎么變為異步方法”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。