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

在Python同步方法中調(diào)用異步方法不阻塞主流程的幾種方案

 更新時間:2025年03月14日 08:21:47   作者:oliver.chau  
這篇文章主要介紹了在Python同步方法中調(diào)用異步方法不阻塞主流程的幾種方案,包括使用asyncio.create_task()、threading和concurrent.futures,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

如果你想在 同步方法 中調(diào)用 異步方法 save_category_icon,并且不阻塞主線程,可以使用 asyncio.create_task() 或 threading/concurrent.futures 來實現(xiàn)。

方案 1:使用 asyncio.create_task()(推薦)

如果你的代碼 運行在事件循環(huán)中(如 Flask + Quart 或 FastAPI),可以使用:

import asyncio

async def save_category_icon(category_id=0, category_name=None):
    await asyncio.sleep(2)  # 模擬異步任務(wù)
    print(f"Icon saved for category {category_id} - {category_name}")

def edit_category():
    loop = asyncio.get_event_loop()
    loop.create_task(save_category_icon(category_id=1, category_name="Test"))
    print("Main process continues...")  # 不會等待異步任務(wù)完成

edit_category()

優(yōu)點

  • 不會阻塞主線程
  • 任務(wù)會在后臺執(zhí)行
  • 適用于已運行的 asyncio 事件循環(huán)(FastAPI、Quart 等)

方案 2:使用 threading(適用于 Flask 同步環(huán)境)

如果你的代碼在 Flask(同步框架)中運行,推薦用 threading 運行異步方法:

import threading
import asyncio

def run_async_task():
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    loop.run_until_complete(save_category_icon(category_id=1, category_name="Test"))

def edit_category():
    threading.Thread(target=run_async_task, daemon=True).start()
    print("Main process continues...")  # 不會等待異步任務(wù)完成

edit_category()

優(yōu)點

  • 不會阻塞 Flask 主進程
  • 在 Flask 等同步環(huán)境下仍可運行異步任務(wù)
  • daemon=True 確保進程退出時線程自動關(guān)閉

方案 3:使用 concurrent.futures(適用于高并發(fā)情況)

如果你的異步任務(wù)是 CPU 密集型 或者需要更好的線程池管理,可以使用 concurrent.futures

import asyncio
from concurrent.futures import ThreadPoolExecutor

executor = ThreadPoolExecutor()

def run_async_task():
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    loop.run_until_complete(save_category_icon(category_id=1, category_name="Test"))

def edit_category():
    executor.submit(run_async_task)  # 提交任務(wù)到線程池
    print("Main process continues...")

edit_category()

優(yōu)點

  • 適用于高并發(fā)任務(wù)
  • 可以復(fù)用 ThreadPoolExecutor,提高性能
  • 不阻塞主進程

選哪個方案?

方案適用場景優(yōu)點
asyncio.create_task()代碼已經(jīng)運行在事件循環(huán)(FastAPI、Quart)輕量級,非阻塞
threading.Thread()Flask 或 Django(同步框架)適用于 Flask,后臺執(zhí)行任務(wù)
concurrent.futures.ThreadPoolExecutor高并發(fā)或多個異步任務(wù)適用于 CPU 密集型任務(wù)

推薦最佳方案

  • FastAPI、Quart: ? 使用 asyncio.create_task()
  • Flask、Django(同步): ? 使用 threading.Thread()
  • 高并發(fā)任務(wù): ? 使用 concurrent.futures.ThreadPoolExecutor

這樣 異步任務(wù)會在后臺運行,不會阻塞主流程!

總結(jié)

到此這篇關(guān)于在Python同步方法中調(diào)用異步方法不阻塞主流程的幾種方案的文章就介紹到這了,更多相關(guān)Python同步方法調(diào)用異步方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python編程學(xué)習(xí)之如何判斷3個數(shù)的大小

    Python編程學(xué)習(xí)之如何判斷3個數(shù)的大小

    這篇文章主要給大家介紹了關(guān)于Python編程學(xué)習(xí)之如何判斷3個數(shù)的大小的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Python進度條tqdm的用法詳解

    Python進度條tqdm的用法詳解

    這篇文章主要介紹了Python進度條tqdm的用法,這對于第三方庫非常豐富的Python來說,想要實現(xiàn)這一功能并不是什么難事,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2021-08-08
  • Python隨機生成帶特殊字符的密碼

    Python隨機生成帶特殊字符的密碼

    這篇文章主要介紹了Python隨機生成帶特殊字符的密碼的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • 詳解Python中命令行參數(shù)argparse的常用命令

    詳解Python中命令行參數(shù)argparse的常用命令

    這篇文章主要為大家詳細介紹了Python中命令行參數(shù)argparse的一些常用命令,文中的示例代碼講解詳細,具有一定的學(xué)習(xí)價值,需要的可以了解一下
    2023-01-01
  • Python文件打開方式實例詳解【a、a+、r+、w+區(qū)別】

    Python文件打開方式實例詳解【a、a+、r+、w+區(qū)別】

    這篇文章主要介紹了Python文件打開方式,結(jié)合實例形式詳細分析了Python文件打開函數(shù)的使用及a、a+、r+、w+等屬性功能、使用區(qū)別與相關(guān)操作注意事項,需要的朋友可以參考下
    2019-03-03
  • Python中的圖形繪制簡單動畫實操

    Python中的圖形繪制簡單動畫實操

    這篇文章主要介紹了Python中的圖形繪制簡單動畫實操,?Matplotlib?是一個非常廣泛的庫,它也支持圖形動畫,動畫工具以?matplotlib.animation?基類為中心,它提供了一個框架,圍繞該框架構(gòu)建動畫,下面來看看具體的實現(xiàn)過程吧,需要的小伙伴可以參考一下
    2022-02-02
  • Python虛擬環(huán)境庫virtualenvwrapper安裝及使用

    Python虛擬環(huán)境庫virtualenvwrapper安裝及使用

    這篇文章主要介紹了Python虛擬環(huán)境庫virtualenvwrapper安裝及使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • Python和Java的語法對比分析語法簡潔上python的確完美勝出

    Python和Java的語法對比分析語法簡潔上python的確完美勝出

    Python是一種廣泛使用的解釋型、高級編程、通用型編程語言,由吉多·范羅蘇姆創(chuàng)造,第一版發(fā)布于1991年。這篇文章主要介紹了Python和Java的語法對比,語法簡潔上python的確完美勝出 ,需要的朋友可以參考下
    2019-05-05
  • 對Python 數(shù)組的切片操作詳解

    對Python 數(shù)組的切片操作詳解

    今天小編就為大家分享一篇對Python 數(shù)組的切片操作詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 基于tensorflow指定GPU運行及GPU資源分配的幾種方式小結(jié)

    基于tensorflow指定GPU運行及GPU資源分配的幾種方式小結(jié)

    今天小編就為大家分享一篇基于tensorflow指定GPU運行及GPU資源分配的幾種方式小結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02

最新評論