Python 如何使用multiprocessing多进程将处理后的列表元素加入输出列表
Python多进程并行处理列表元素实现方案
你可以直接使用Python标准库的multiprocessing.Pool实现需求,代码改动量非常小,如下是完整实现:
from multiprocessing import Pool # 你原来的处理函数 def get_output(n): output = # 此处保留你原来的整数处理逻辑 return output input_list = [1,2,3,5,6,8,5,5,8,6,5,2,5,2,5,4,5,2] if __name__ == '__main__': # 不指定进程数时默认使用当前设备的CPU核心数 with Pool() as pool: # map方法会自动将input_list的每个元素传入get_output执行,返回结果列表 output_list = pool.map(get_output, input_list) # 此处可以正常使用output_list print(output_list)
如果你的输入列表非常大,想要边处理边获取结果,可以把map换成imap,迭代获取返回值即可,不需要等所有元素处理完成再拿到结果:
if __name__ == '__main__': with Pool() as pool: output_list = [] for result in pool.imap(get_output, input_list): output_list.append(result) # 此处可以添加进度打印等自定义逻辑
注意事项
- Windows系统必须将多进程执行逻辑放在
if __name__ == '__main__'代码块内,否则会触发无限创建子进程的错误 - 多进程仅适合计算密集型的处理逻辑:如果
get_output内部逻辑非常简单,进程间通信的开销反而会导致执行速度比串行更慢 - 传入的处理函数
get_output必须支持pickle序列化:普通顶层定义的函数都符合要求,不要使用嵌套闭包、未序列化的类实例方法作为处理函数 - 进程数默认和CPU核心数一致即可,无需手动设置过大的值,否则频繁的进程切换会抵消并行收益
内容的提问来源于stack exchange,提问作者Darkknight
相关产品推荐
相关产品推荐

