我试图了解如何让孩子写一个父母的变量。也许我在这里做错了什么,但我想象多处理过程只花了一小部分时间:
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)
答案 0 :(得分:2)
@Blender基本上已经回答了你的问题,但作为评论。有一些与multiprocessing
机器相关的开销,所以如果你在没有做任何重要工作的情况下产生开销,那就会慢一些。
尝试实际做一些并行化的工作。例如,编写Python代码来打开文件,使用正则表达式扫描它,然后拉出匹配的行;然后列出十个大文件和时间,使用多处理与普通Python完成所有十个文件所需的时间。或编写代码来计算昂贵的函数并尝试。
我使用multiprocessing.Pool()
只是为了运行一堆外部程序的实例。我使用subprocess
来运行音频编码器,它一次运行了四个编码器实例,以获得明显的加速。