多进程比顺序Python 3.5慢

2024-04-19 11:47:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用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。在


Tags: 函数in编辑forget进程顺序my
1条回答
网友
1楼 · 发布于 2024-04-19 11:47:09

这两个例子没有(真正的)区别,因为.get()将等待进程完成。因此,您的多进程示例也将是顺序的,但它将花费更多的时间,因为它在不同的节点上生成进程。在

首先启动所有进程,然后等待结果。在

pool = Pool()
futures = []
for i in range(0, 3):
    for j in range(0, 3):
        futures.append(pool.apply_async(my_function,my_args))

# You can also make some additional calculation here if you want

#
# Lets see if the multiprocess stuff is finished
for i in futures:
    i.get()


pool.close()
# pool.join() 

您也可以省略.join(),因为主进程不可能比子进程快完成。在

相关问题 更多 >