Python多进程返回值处理:如何提取多个进程返回的最小运算值
解决方案
你只需要在遍历多进程返回结果时,把每个进程返回的最优值提取出来,再筛选最小值即可,修改后的完整代码如下:
import concurrent.futures import time import os # 原有业务逻辑函数无需调整 def do_processVal(): getParamInit() do_evaluation() currbestVal = bestGlobalVal return 'Current best value: ', currbestVal, 'for process{}'.format(os.getpid()) start = time.perf_counter() # 初始化最小值变量为无穷大,用于后续比对更新 FinalbestVal = float('inf') with concurrent.futures.ProcessPoolExecutor() as executor: results = [executor.submit(do_processVal) for _ in range(5)] for f in concurrent.futures.as_completed(results): # 修正原代码笔误:获取单个进程返回值用result(),不是results() res = f.result() print(res) # 提取返回元组中索引为1的元素,就是待比对的最优数值 curr_val = res[1] # 实时比对更新最小值 if curr_val < FinalbestVal: FinalbestVal = curr_val finish = time.perf_counter() print(f'Finished in {round(finish-start, 2)} second(s)') print(f'FinalbestVal = {FinalbestVal}')
逻辑说明
- 你定义的
do_processVal返回的是三元组结构,第二个元素就是需要比对的数值,直接提取即可 - 提前初始化最小值为无穷大,每拿到一个进程的返回结果就做一次对比,自动更新为更小的数值,所有进程执行完成后就得到全局最小的最优值
- 原代码中的
f.results()属于笔误,去掉末尾的s才能正常获取进程返回结果
内容的提问来源于stack exchange,提问作者NAJAA BAZILAH
相关产品推荐
相关产品推荐

