首页 > 解决方案 > 为多处理 Python 绘制池图

问题描述

如何使用 python 中的多处理工具运行多个进程池,在其中异步处理 run1-3。我正在尝试分别传递(10,2,4),(55,6,8),(9,8,7)run1,run2,run3

import multiprocessing 
def Numbers(number,number2,divider):
   value = number * number2/divider
   return value
if __name__ == "__main__":

   with multiprocessing.Pool(3) as pool:               # 3 processes
        run1, run2, run3 = pool.map(Numbers, [(10,2,4),(55,6,8),(9,8,7)]) # map input & output

标签: pythonfunctionasynchronousmultiprocessingpool

解决方案


您只需要使用 methodstarmap而不是map,根据文档:

就像map()除了迭代的元素应该是作为参数解包的迭代。

因此,结果的可迭代[(1,2), (3, 4)][func(1,2), func(3,4)]

import multiprocessing
def Numbers(number,number2,divider):
   value = number * number2/divider
   return value
if __name__ == "__main__":

   with multiprocessing.Pool(3) as pool:               # 3 processes
        run1, run2, run3 = pool.starmap(Numbers, [(10,2,4),(55,6,8),(9,8,7)]) # map input & output
   print(run1, run2, run3)

印刷:

5.0 41.25 10.285714285714286

笔记

这是做你想做的事情的正确方法,但你不会发现对这样一个微不足道的工作函数使用多处理会提高性能;事实上,由于创建池以及将参数和结果从一个地址空间传递到另一个地址空间的开销,它会降低性能。


推荐阅读