繁体   English   中英

Python利用多个处理器

[英]Python utilizing multiple processors

让我们说我有一个很大的不同长度的音乐列表需要转换或不同大小的图像需要调整大小或类似的东西。 顺序无关紧要,因此非常适合分割多个处理器。

如果我使用multiprocessing.Pool的map函数,似乎所有的工作都是提前划分的,并没有考虑到某些文件可能需要更长时间来完成其他工作的事实。

如果我有12个处理器......接近处理结束时,1或2个处理器将剩下2或3个文件处理,而其他可以使用的处理器闲置。

是否有某种队列实现可以保持所有处理器加载,直到没有剩下的工作要做?

multiprocessing模块中有一个Queue类专门用于此目的。

编辑:如果您正在寻找一个完整的并行计算框架,它具有使用任务队列的map()函数,请查看IPython的并行计算工具。 特别是,您可以使用TaskClient.map()函数来获得可用处理器的负载平衡映射。

这对于水壶来说是微不足道的:

def process_image(img):
     ....
images = glob('*.jpg')
for im in images:
      Task(process_image, im)

现在,只需运行jug execute几次就可以生成工作进程。

关于队列实现。 有一些。

看看Celery项目。 http://celeryproject.org/

因此,在您的情况下,您可以作为Celery任务运行12次转换(每个CPU一次),添加回调函数(转换或任务),并在该回调函数中添加一个新的转换任务,当前一个运行时转换完成。

最让我高兴的Python线程库是Parallel Python(PP) PP使用线程池方法和单个队列来实现您的需求是微不足道的。

如果您使用Pool.imap_unordered则不是这种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM