欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python?FastApi結(jié)合異步執(zhí)行方式

 更新時間:2024年06月21日 10:20:04   作者:郝少  
這篇文章主要介紹了Python?FastApi結(jié)合異步執(zhí)行方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Python FastApi結(jié)合異步執(zhí)行

需求說明

在使用fastApi框架的時候,往往程序會卡到uvicorn.run方法的執(zhí)行步驟,從而其下面同步執(zhí)行的動作不能被執(zhí)行,此時需要使用異步思維進行其他動作的執(zhí)行;

代碼

  • Web.py
from fastapi import FastAPI
app = FastAPI()


@app.get("/info")
async def info():
    return {"key": "HelloWorld"}
  • WebMain.py
import uvicorn
from threading import Thread
from time import sleep


def my_async(f):
    def wrapper(*args, **kwargs):
        thr = Thread(target=f, args=args, kwargs=kwargs)
        thr.start()
    return wrapper


@my_async
def print_info():
    sleep(5)
    print("############test")


if __name__ == '__main__':
    # 放在uvicorn.run前面,不然走不到此方法;
    print_info()
    uvicorn.run(app='Web:app', host='127.0.0.1', port=8000, reload=True, debug=True)

在FastApi中實現(xiàn)異步問題

在FastAPI應(yīng)用中使用異步特性可以提高并發(fā)性能,但如果您要調(diào)用的模型是同步的,可能會導致阻塞。

為了實現(xiàn)異步處理,您可以將阻塞的操作委托給線程池或進程池,以便異步執(zhí)行。

以下是一種基本方法來實現(xiàn)異步處理圖片識別任務(wù):

from fastapi import FastAPI
from concurrent.futures import ThreadPoolExecutor
import asyncio
 
app = FastAPI()
executor = ThreadPoolExecutor(max_workers=10)  # 創(chuàng)建線程池,可以根據(jù)需求調(diào)整線程數(shù)
 
# 模擬一個阻塞的圖片識別函數(shù)
def blocking_image_recognition(image_data):
    # 模擬耗時操作,實際中會調(diào)用模型進行識別
    asyncio.sleep(5)
    return f"Recognized: {image_data}"
 
@app.post("/recognize-image")
async def recognize_image(image_data: str):
    # 使用線程池異步執(zhí)行阻塞操作
    loop = asyncio.get_event_loop()
    result = await loop.run_in_executor(executor, blocking_image_recognition, image_data)
 
    # 此處可以將結(jié)果保存到數(shù)據(jù)庫或進行其他操作
    # 使用異步方式進行數(shù)據(jù)庫操作
    # ...
 
    return {"result": result}

在上述示例中,我們使用ThreadPoolExecutor創(chuàng)建了一個線程池,用于異步執(zhí)行阻塞操作。blocking_image_recognition函數(shù)模擬了一個耗時的識別操作,實際中會根據(jù)模型來實現(xiàn)。在recognize_image路由中,我們使用loop.run_in_executor將阻塞操作交給線程池來異步執(zhí)行。

在處理識別結(jié)果時,您可以使用異步框架(例如Tortoise-ORM)來保存數(shù)據(jù)到數(shù)據(jù)庫,確保數(shù)據(jù)庫操作也是非阻塞的。這樣,您就可以同時處理多個圖片識別任務(wù),提高并發(fā)性能。

如果需要更高級的并發(fā)控制,您還可以考慮使用異步任務(wù)隊列(例如Celery)來進一步分布式處理圖片識別任務(wù)。 Celery允許您在多個遠程機器上并行執(zhí)行任務(wù)。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Pandas 類型轉(zhuǎn)換astype()的實現(xiàn)

    Pandas 類型轉(zhuǎn)換astype()的實現(xiàn)

    本文主要介紹了Pandas 類型轉(zhuǎn)換astype()的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • 淺談python迭代器

    淺談python迭代器

    這篇文章主要介紹了淺談python迭代器,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • python讀取測試數(shù)據(jù)的多種方式

    python讀取測試數(shù)據(jù)的多種方式

    本文主要介紹了python讀取測試數(shù)據(jù)的多種方式,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • python?序列去重并保持原始順序操作

    python?序列去重并保持原始順序操作

    這篇文章主要介紹了python序列去重并保持原始順序操作,文章圍繞了python?序列去重的相關(guān)資料展開詳細介紹,需要的小伙伴可以參考一下,希望對你的有所幫助
    2022-03-03
  • pygame實現(xiàn)俄羅斯方塊游戲(AI篇1)

    pygame實現(xiàn)俄羅斯方塊游戲(AI篇1)

    這篇文章主要為大家詳細介紹了pygame實現(xiàn)俄羅斯方塊游戲AI的第1篇,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Python的scikit-image模塊實例講解

    Python的scikit-image模塊實例講解

    在本篇文章里小編給大家整理了一篇關(guān)于Python的scikit-image模塊實例講解內(nèi)容,有需要的朋友們可以學習下。
    2020-12-12
  • 在django admin詳情表單顯示中添加自定義控件的實現(xiàn)

    在django admin詳情表單顯示中添加自定義控件的實現(xiàn)

    這篇文章主要介紹了在django admin詳情表單顯示中添加自定義控件的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • PyCharm代碼回滾,恢復歷史版本的解決方法

    PyCharm代碼回滾,恢復歷史版本的解決方法

    今天小編就為大家分享一篇PyCharm代碼回滾,恢復歷史版本的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • python 識別圖片中的文字信息方法

    python 識別圖片中的文字信息方法

    今天小編就為大家分享一篇python 識別圖片中的文字信息方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python 通過URL打開圖片實例詳解

    Python 通過URL打開圖片實例詳解

    這篇文章主要介紹了Python 通過URL打開圖片實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06

最新評論