溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python同步方法怎么變?yōu)楫惒椒椒?/h1>
發(fā)布時間:2022-04-12 10:21:08 來源:億速云 閱讀:411 作者:iii 欄目:開發(fā)技術(shù)

本文小編為大家詳細(xì)介紹“Python同步方法怎么變?yōu)楫惒椒椒ā?,?nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Python同步方法怎么變?yōu)楫惒椒椒ā蔽恼履軒椭蠹医鉀Q疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。

背景

在我們平時的FastApi工作中,經(jīng)常會用到一些異步的操作,為了保持一致,我們一般會編寫配套的異步代碼。

但如果我們提供了類似jmeter BeanShell的可執(zhí)行代碼的功能給用戶,那用戶還能給你編寫異步代碼嗎?那顯然是不可能的事情。

還有一種情況,當(dāng)我們引入第三方包,比如一些oss的庫,里面天然是同步方法,有內(nèi)置的requests請求,你想不阻塞整個fastapi服務(wù),也是需要將他們異步化的。

怎么做?

這塊先給我點(diǎn)時間去調(diào)研,我暫時還沒有完全玩明白里面的內(nèi)容。初步的設(shè)想是通過loop.run_in_executor執(zhí)行同步代碼,讓他超乎三界之外,不讓其阻塞事件循環(huán)。

由于還不是很確定,所以會在后面理解清楚了補(bǔ)充進(jìn)來。那就沒有現(xiàn)成的方案嗎?答案是有的,想做這件事情的,不只是我哦!

為此我調(diào)研了幾個庫,它們都能很好地解決這個問題。下面我們來一一介紹。

Asyncer

這是大名鼎鼎的FastApi的作者,休閑娛樂的時候?qū)懙囊豢罟ぞ?,它不僅可以把同步代碼異步化,還可以把異步代碼同步化,我們來看看介紹。

Python同步方法怎么變?yōu)楫惒椒椒?></p><p>簡單看下,上面的同步方法(內(nèi)部用了sleep)在asyncify的包裹下,變成了awaitable的方法,即異步化。不過由于我沒有真實(shí)使用,看在作者的面上,給個推薦。</p><p>AnyIO.run,因?yàn)檫@個庫基于AnyIO而編寫的(又是個奇怪的知識點(diǎn)),我想應(yīng)該和asyncio.run差不多療效。</p><p>總之,既然作者的介紹是符合我們預(yù)期的,我們就推薦一下。</p><pre class=pip install asyncer

awaitable

這個庫挺不錯的,是一個烏拉老哥寫的。里面充斥著我看不懂的俄語注釋,但我試過功能比較完善,也很容易上手,不信咱們看看:

  • 安裝

pip install awaits
  • 使用

Python同步方法怎么變?yōu)楫惒椒椒?></p><p>和上面的區(qū)別在于,他只是把同步方法裝飾起來,就可以當(dāng)異步方法用了,是不是非常神奇!</p><p>我測試過,療效不錯。因?yàn)樗簿邆洚惒椒椒ǖ钠渌匦?,比如取消。具體可以參考下我對下面那個庫介紹的圖片示例代碼。</p><h3>aioify</h3><p>這個是我接觸過的第一個同步轉(zhuǎn)異步的庫,為此我還為它提過issue。圖里面是我測試一個同步方法異步化以后,能不能做取消類似的操作。這個是我用來判斷它是否阻塞的一個因素。</p><p><img src=pip install aioify

讀到這里,這篇“Python同步方法怎么變?yōu)楫惒椒椒ā蔽恼乱呀?jīng)介紹完畢,想要掌握這篇文章的知識點(diǎn)還需要大家自己動手實(shí)踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI