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

如何让两个Python函数并行运行,任一返回即终止其他函数

实现并行函数竞速:先完成即终止另一个进程

你可以通过Python的multiprocessing模块实现这个需求——用进程启动两个任务,通过队列传递结果,一旦获取到第一个返回值就终止未完成的进程。以下是适配你示例代码的完整实现:

from datetime import datetime
import multiprocessing

def fun1(n, result_queue): # 从数据源1获取数据
    sums = -1
    if n > -1:
        sums = sum([x*x for x in range(n)])
    result_queue.put(sums)

def fun2(n, result_queue): # 从数据源2获取数据
    sums = -1
    if n > -1:
        sums = (n*(2*n+1)*(n+1))/6
    result_queue.put(int(sums))

if __name__ == '__main__':
    no = 999999
    # 创建进程间通信队列,用于传递结果
    result_queue = multiprocessing.Queue()
    
    # 初始化两个子进程
    p1 = multiprocessing.Process(target=fun1, args=(no, result_queue))
    p2 = multiprocessing.Process(target=fun2, args=(no, result_queue))
    
    # 启动并行任务
    p1.start()
    p2.start()
    
    # 阻塞等待第一个结果返回
    final_result = result_queue.get()
    
    # 终止仍在运行的进程
    if p1.is_alive():
        p1.terminate()
    if p2.is_alive():
        p2.terminate()
    
    # 等待进程资源回收,避免僵尸进程
    p1.join()
    p2.join()
    
    print("最终结果:", final_result)

核心逻辑说明

  • 进程间通信:用multiprocessing.Queue实现子进程与主进程的结果传递,因为子进程无法直接向主进程返回值。
  • 竞速监听:result_queue.get()会阻塞主进程,直到任意一个子进程完成计算并将结果放入队列。
  • 终止闲置进程:通过is_alive()判断进程状态,对未完成的进程调用terminate()强制终止,避免资源浪费。
  • 资源回收:最后调用join()确保进程资源被系统正确回收。

实际对接API时,只需把示例中的计算逻辑替换为你的API请求代码即可,核心的进程管理逻辑保持不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:15:29