小编Lui*_*uis的帖子

最后一个进程的python多处理映射错误处理

有一个奇怪的行为,map使用Python的时候multiprocessing.Pool。在下面的示例中,一个由 4 个处理器组成的池将处理 28 个任务。这应该需要七遍,每遍需要 4 秒。

然而,它需要8个pass。在前六轮中,所有处理器都被占用。在第 7 次传递中,仅完成了两个任务(两个空闲处理器)。剩下的 2 个任务在第 8 次传递中完成(再次是两个空闲处理器)。这种行为出现在看似随机的 cpu 数量和任务数量组合中,不必要地浪费时间。

此示例已在 Intel Xeon Haswell(20 核)和 Intel i7(4 核)上重现。

关于如何强制Pool在所有通道中使用所有可用处理器的任何想法?

import time
import multiprocessing
from multiprocessing import Pool
import datetime

def f(values):
    now = str(datetime.datetime.now())
    proc_id = str(multiprocessing.current_process())
    print(proc_id+' '+now)
    a=values**2
    time.sleep(4)
    return a 

if __name__ == '__main__':
    p = Pool(4) #number of processes
    processed_values= p.map( f, range(28))
    p.close()
    p.join()
    print processed_values
Run Code Online (Sandbox Code Playgroud)

运行的输出如下

<Process(PoolWorker-1, started daemon)> 2016-05-13 17:08:49.604065
<Process(PoolWorker-2, …
Run Code Online (Sandbox Code Playgroud)

python dictionary pool multiprocessing

5
推荐指数
1
解决办法
682
查看次数

标签 统计

dictionary ×1

multiprocessing ×1

pool ×1

python ×1