如何让两个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
相关产品推荐
相关产品推荐

