python 3的多进程map-reduce.x/Windows 7在单核上运行



我遵循了这个很好的教程,展示了如何将多个映射实例作为进程运行。然而,在python 3.4.3/Windows 7 x64上,任何时候都使用单核。

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 machine)中,相同的脚本显示处理器100%繁忙。

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

这里的多进程特性在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()
    #...

相关内容

  • 没有找到相关文章

最新更新