如何将迭代range的for循环改写为Multiprocessing多进程版本并解决空结果问题
问题核心原因
Python多进程间默认不共享全局变量的内存空间,你在子进程中对全局results列表的修改仅作用于子进程自身的内存副本,不会同步到主进程,因此最终主进程打印的results始终为空。
适配你的场景的最简解决方案
直接使用pool.map的返回值即可,pool.map会自动收集每个函数调用的返回值,按输入顺序拼接为列表返回,无需自行维护全局结果列表:
from multiprocessing import Pool def compute_value(i): # 此处替换为你实际的计算逻辑 return i if __name__ == '__main__': n_iterations = 10 # 替换为你实际的循环总次数 pool = Pool() results = pool.map(compute_value, range(n_iterations)) # 回收进程资源 pool.close() pool.join() print(results)
补充说明
pool.map返回的结果顺序和输入的range(n_iterations)顺序完全一致,不会因为多进程执行顺序不同出现结果错位。- 如果你的
compute_value需要传入多个参数,可改用pool.starmap,将多组参数打包为元组组成的列表传入即可。 - 进程池使用完毕后务必执行
close()和join()回收资源,避免产生僵尸进程占用系统资源。
内容的提问来源于stack exchange,提问作者MMM
相关产品推荐
相关产品推荐

