You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何异步调用无返回值的函数?附Python示例场景

异步调用阻塞函数的实现方法

针对你给出的阻塞函数slow(),要让调用线程无需等待其执行完成即可继续运行,有以下几种常用方案:

1. 使用threading模块创建线程

这是处理IO阻塞任务最常用的轻量方案,线程开销远低于进程:

import time
import threading

def slow() -> None:
    time.sleep(60)
    print("Slow function finished")

def main():
    print("Hello")
    # 创建并启动后台线程执行slow
    thread = threading.Thread(target=slow)
    thread.start()
    print("World!")  # 无需等待60秒,立刻执行

if __name__ == "__main__":
    main()

启动线程后,主线程会直接继续执行后续代码,slow()在后台线程中运行。如果需要等待slow()执行完成,可在合适位置调用thread.join()。

2. 使用concurrent.futures.ThreadPoolExecutor

线程池适合批量提交异步任务,代码更简洁:

import time
from concurrent.futures import ThreadPoolExecutor

def slow() -> None:
    time.sleep(60)
    print("Slow function finished")

def main():
    print("Hello")
    # 初始化线程池并提交任务
    executor = ThreadPoolExecutor()
    executor.submit(slow)
    print("World!")  # 立刻执行
    # 若需等待所有任务完成再退出程序,可调用 executor.shutdown(wait=True)

if __name__ == "__main__":
    main()

3. 使用multiprocessing多进程

多进程适合CPU密集型任务,虽然IO阻塞场景下线程更高效,但也可以实现需求:

import time
import multiprocessing

def slow() -> None:
    time.sleep(60)
    print("Slow function finished")

def main():
    print("Hello")
    process = multiprocessing.Process(target=slow)
    process.start()
    print("World!")  # 无需等待即可执行
    # 等待进程完成可调用 process.join()

if __name__ == "__main__":
    main()

4. 在asyncio异步场景中调用

如果你的代码基于asyncio框架,需要把同步阻塞函数放到线程池中执行:

import time
import asyncio

def slow() -> None:
    time.sleep(60)
    print("Slow function finished")

async def main():
    print("Hello")
    # 获取当前事件循环,用线程池执行slow
    loop = asyncio.get_running_loop()
    loop.run_in_executor(None, slow)
    print("World!")  # 立刻执行

if __name__ == "__main__":
    asyncio.run(main())

内容的提问来源于stack exchange,提问作者sourcream

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 09:35:06