如何在Python循环中使用多进程并行执行三个计算函数?
在Python循环中通过多进程异步执行三个计算函数的实现方法
我有三个计算函数(求和、乘法、除法),希望在Python的循环中通过多进程异步执行它们,如何实现将这三个函数应用到循环中?以下是我的示例代码及期望的最终结果:
原示例代码(含语法问题)
def sum(a, b): sum= a+b # 变量名与函数名冲突,覆盖内置sum函数 return sum def multi(a, b): mutli= a*b # 拼写错误:mutli → multi return multi def divide(a, b): divide= a/b # 变量名与函数名冲突 return divide final_data = [{'a':1, 'b':3},{'a':7, 'b':5},{'a':6, 'b':4}] for data in final : # 变量名错误:final → final_data sum_value = sum(data['a'], data['b'] # 缺少闭合括号 multi_value = multi(data['a'], data['b'] # 缺少闭合括号 divide_value = divide(data['a'], data['b'] # 缺少闭合括号 # 期望的最终输出 final_data = [ {'a':1, 'b':3, 'sum_value':4, 'multi_value':3, 'divide_value':0.34}, {'a':7, 'b':5,'sum_value':12, 'multi_value':35, 'divide_value':1.4}, {'a':6, 'b':4,'sum_value':10, 'multi_value':24, 'divide_value':1.5} ]
修正后的多进程实现方案
首先修正原函数的命名和拼写问题,再使用concurrent.futures.ProcessPoolExecutor实现多进程异步执行:
1. 修正基础计算函数
def calculate_sum(a, b): return a + b def calculate_multi(a, b): return a * b def calculate_divide(a, b): return a / b
2. 多进程异步处理逻辑
from concurrent.futures import ProcessPoolExecutor final_data = [{'a':1, 'b':3},{'a':7, 'b':5},{'a':6, 'b':4}] # 处理单个数据项的函数:在子进程中并行执行三个计算 def process_single_item(item): a, b = item['a'], item['b'] with ProcessPoolExecutor(max_workers=3) as executor: # 提交三个异步计算任务 sum_task = executor.submit(calculate_sum, a, b) multi_task = executor.submit(calculate_multi, a, b) divide_task = executor.submit(calculate_divide, a, b) # 获取任务结果 sum_val = sum_task.result() multi_val = multi_task.result() divide_val = divide_task.result() # 将结果合并到原字典,匹配示例的小数格式 item['sum_value'] = sum_val item['multi_value'] = multi_val item['divide_value'] = round(divide_val, 2) if not divide_val.is_integer() else divide_val return item # 批量处理所有数据项(外层也可并行) with ProcessPoolExecutor() as executor: processed_result = list(executor.map(process_single_item, final_data)) # 输出结果 for item in processed_result: print(item)
代码说明
ProcessPoolExecutor是Python标准库中用于管理多进程的工具,submit()方法提交异步任务,返回Future对象,通过result()获取执行结果- 对每个数据项,我们在子进程中并行执行三个计算函数,相比串行执行能提升计算效率(尤其当计算逻辑复杂时)
- 处理小数位数时,判断结果是否为整数,非整数则保留两位小数,与示例输出格式一致
内容的提问来源于stack exchange,提问作者Adarsh Srivastav
相关产品推荐
相关产品推荐

