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

Python并行执行两同功能函数取最快结果并终止慢函数实现方法

实现方案

核心用Python标准库concurrent.futures实现,零侵入原有函数逻辑,不需要修改func_a()、func_b()的内部代码,即可实现「并行运行、取首个返回结果、终止剩余慢任务」的需求。

由于你的场景是拉取Binance接口数据,属于IO密集型任务,优先用线程池实现,开销小、适配性强;如果两个函数内部包含大量CPU密集型计算,把线程池替换为进程池即可,核心逻辑完全不变。

核心实现代码

from concurrent.futures import ThreadPoolExecutor, wait, FIRST_COMPLETED

# 以下两个函数为你已有的、不可修改的原有逻辑
def func_a():
    # 原有拉取Binance数据、计算的逻辑,保持原样即可
    pass

def func_b():
    # 原有拉取Binance数据、计算的逻辑,保持原样即可
    pass

def fetch_fastest_data():
    # 初始化容量为2的线程池,刚好承载两个并行任务
    with ThreadPoolExecutor(max_workers=2) as executor:
        # 向线程池提交两个任务
        task_a = executor.submit(func_a)
        task_b = executor.submit(func_b)

        # 阻塞等待,直到任意一个任务执行完成
        done_tasks, pending_tasks = wait(
            [task_a, task_b],
            return_when=FIRST_COMPLETED
        )

        # 取首个完成的任务结果,增加异常兼容:如果先跑完的任务抛错,就取后完成的结果
        first_finish = next(iter(done_tasks))
        try:
            final_result = first_finish.result()
        except Exception:
            rest_task = next(iter(pending_tasks))
            final_result = rest_task.result()

        # 强制取消所有还在运行的慢任务,释放网络、线程资源
        for task in pending_tasks:
            task.cancel()

        return final_result

使用说明

  • 每分钟定时执行的逻辑,直接在外层封装定时调度即可:简单场景可以用while True循环加time.sleep(60)实现,需要更可靠的调度可以用定时任务库,不影响核心取数逻辑。
  • 不要手动写原生线程+全局标志位的终止逻辑:这类实现很难正确回收网络连接、线程栈资源,容易出现内存泄漏、连接占满的问题,标准库的实现已经做了兼容处理。
  • 如果你的函数后续扩展到更多个同逻辑实现,只需要把新的函数提交到线程池,wait方法会自动等待第一个完成的任务,不需要改核心逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:27:25