2

我试图了解如何让孩子写入父母的变量。也许我在这里做错了什么,但我会想象多处理会花费它实际花费的时间的一小部分:

import multiprocessing, time

def h(x):
    h.q.put('Doing: ' + str(x))
    return x

def f_init(q):
    h.q = q

def main():
    q = multiprocessing.Queue()
    p = multiprocessing.Pool(None, f_init, [q])
    results = p.imap(h, range(1,5))
    p.close()

- - -结果 - - -:

1
2
3
4
Multiprocessed: 0.0695610046387 seconds
1
2
3
4
Normal: 2.78949737549e-05 seconds # much shorter

    for i in range(len(range(1,5))):
        print results.next() # prints 1, 4, 9, 16

if __name__ == '__main__':
    start = time.time()
    main()
    print "Multiprocessed: %s seconds" % (time.time()-start)             

    start = time.time()
    for i in range(1,5):
        print i
    print "Normal: %s seconds" % (time.time()-start)             
4

1 回答 1

2

@Blender 基本上已经回答了您的问题,但作为评论。有一些与multiprocessing机器相关的开销,所以如果你在没有做任何重要工作的情况下产生开销,它会变慢。

尝试实际做一些可以很好地并行化的工作。例如,编写 Python 代码打开一个文件,使用正则表达式扫描它,并拉出匹配的行;然后列出十个大文件,并计算使用多处理与普通 Python 完成所有十个文件所需的时间。或者编写代码来计算一个昂贵的函数并尝试一下。

我以前multiprocessing.Pool()只是运行一堆外部程序的实例。我曾经subprocess运行一个音频编码器,它一次运行四个编码器实例以显着加快速度。

于 2012-08-22T06:55:35.130 回答