使用Python multiprocessing实现分层相邻数累加的循环逻辑问题
代码调整方案
核心修改逻辑
- 新增外层循环,循环终止条件为当前计算层的数字数量等于1,此时得到的唯一值就是1到17的累加总和
- 重构
divide_test函数,移除全局变量依赖改为入参传入,适配每层动态变化的输入列表 - 每次单层级计算完成后,将共享字典的结果按key顺序提取为下一层的输入列表,若当前层长度为奇数,主动追加最后一个未配对元素到新列表末尾
完整可运行代码
import multiprocessing # 生成初始数字列表1到17 def fill_starting_list(): return [i for i in range(1, 18)] # 拆分数字对存入共享字典,修改为接收当前层列表作为入参 def divide_test(current_list, dict): index = 0 # 两两配对存入字典 for i in range(1, len(current_list), 2): dict[index] = [current_list[i-1], current_list[i]] index += 1 # 长度为奇数时追加最后一个元素 if len(current_list) % 2 == 1: dict[index] = current_list[-1] return dict # 数字求和计算函数 def calculate(key, dict): val = dict[key] if isinstance(val, list): dict[key] = sum(val) if __name__ == '__main__': manager = multiprocessing.Manager() # 初始层为1到17的列表 current_level_list = fill_starting_list() # 循环计算直到只剩一个数字 while len(current_level_list) > 1: dictionary = manager.dict() # 拆分当前层的数字对 divide_test(current_level_list, dictionary) # 启动多进程计算 processes = [] # 单个元素不需要计算,仅给配对的元素创建进程 for process_index in range(len(current_level_list) // 2): p = multiprocessing.Process(target=calculate, args=(process_index, dictionary)) p.start() processes.append(p) # 等待所有进程执行完成 for p in processes: p.join() # 按key顺序提取结果作为下一层输入 current_level_list = [dictionary[k] for k in sorted(dictionary.keys())] print(f"当前层计算结果:{current_level_list}") print(f"最终累加结果:{current_level_list[0]}")
运行验证
运行后会逐层输出每层的计算结果,最终得到1到17的总和为153,和直接求和的结果一致,完全符合层级累加的规则要求。
内容的提问来源于stack exchange,提问作者SlipperyBarrel
相关产品推荐
相关产品推荐

