假设我有一大堆不同长度的音乐需要转换或不同大小的图像需要调整大小或类似的东西。顺序无关紧要,因此非常适合拆分多个处理器。
如果我使用 multiprocessing.Pool 的 map 函数,似乎所有工作都提前分配了,并且没有考虑到某些文件可能需要更长的时间才能完成其他文件这一事实。
如果我有 12 个处理器……接近处理结束时,1 或 2 个处理器将有 2 或 3 个文件要处理,而其他可以利用的处理器处于闲置状态。
是否有某种队列实现可以让所有处理器保持加载状态,直到没有更多工作要做?
最佳答案
有一个Queue
multiprocessing
模块中专门用于此目的的类。
编辑:如果您正在寻找一个完整的并行计算框架,它具有使用任务队列的 map()
函数,请查看 IPython 的并行计算工具.特别是,您可以使用 TaskClient.map()
函数以获取到可用处理器的负载平衡映射。
关于Python 使用多个处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4838738/