2015-10-14 58 views
1

我按照这个nice tutorial显示了如何将多个映射实例作为进程运行。但是,在Python 3.4.3/Windows 7 x64上,随时可以使用单个内核。在单核上运行的python 3.x/Windows 7上的多进程map-reduce

from multiprocessing import Pool 
from itertools import repeat 
import random 
import time 

def Map(L): 
    return len(L) 

def Main(): 
    pool = Pool() 
    lst = [random.sample(range(1, 100), random.randint(1, 50)) for i in repeat(None, 1000000)] 
    start_time = time.time() 
    counts = pool.map(Map, lst) 
    print(time.time() - start_time)  

if __name__ == '__main__': 
    Main() 

在Linux(vmware ubuntu guest机器)中,相同的脚本显示100%繁忙的处理器。

是否有任何技巧强制Windows以真正的并行性运行脚本?

回答

1

这里的多进程功能也可以在Windows上按预期工作。然而,lst代需要很多时间(在Windows上比在Linux上多花几倍)。

在任务管理器中可以看到脚本运行时有5个python.exe进程。起初,其中一个使用25%的CPU,其内存使用率缓慢增加。大约需要一分钟。

然后4个其他进程占用CPU。此处启动pool.map()。但是,它只持续几秒钟。所以,看起来所有事情都只在一个过程中完成。

在行动中看到Windows上的多进程是有意义的减少lst十倍,并把一些循环进入Map(L)功能,使其利用更多的时间,例如:

def Map(L): 
    ret = 0; 
    for i in range(5000): 
     ret += len(L) 
     ret %= 50 
    return ret 

def Main(): 
    pool = Pool() 
    lst = [random.sample(range(1, 100), random.randint(1, 50)) for i in repeat(None, 100000)] 

    print("Start") 
    start_time = time.time() 
    #... 
相关问题