我试图用python进行一些多处理来提高某些函数的速度,我知道创建一个进程有很大的成本,但是我的函数需要大约3秒的时间才能按顺序执行,所以我认为一些多处理可以做到这一点。在
我错了(大呼小叫)多重处理似乎较慢或至少不是更快。 在这里输入一些我在多重处理之前的背景:
for i in range(0, 3):
for j in range(0, 3):
result = my_function(my_args)
现在我所拥有的多重处理:
^{pr2}$我用myfunction替换了实数函数,因为我的函数基本上是一个很难读懂的东西。在
那么,使用多处理的工作量太小了还是我做错了什么?在
编辑:
正如一些人所说,它是按顺序工作的,因为我每次在连接后需要使用它的地方都使用get,但是现在我有一个随机异常,它时不时地弹出,这里是回溯的结束:
文件“/home/rtodo/anaconda3/lib/python3.5/multiprocessing/池.py“,第608行,在get中 提高自我价值 索引器错误:弹出索引超出范围
这是我的密码更正了
pool = Pool()
for i in range(0, 3):
for j in range(0, 3):
neigbhourhood[i][j] = pool.apply_async(my_function,my_args)
for k in range(0, 3):
for l in range(0, 3):
neigbhourhood[i][j] = neigbhourhood[i][j].get()
pool.close()
neighbouhood是一个3x3数组。在
编辑: 我修改了一点代码,现在池在get后关闭,我不使用join。在
这两个例子没有(真正的)区别,因为
.get()
将等待进程完成。因此,您的多进程示例也将是顺序的,但它将花费更多的时间,因为它在不同的节点上生成进程。在首先启动所有进程,然后等待结果。在
您也可以省略
.join()
,因为主进程不可能比子进程快完成。在相关问题 更多 >
编程相关推荐