【发布时间】:2019-07-08 22:40:10
【问题描述】:
我正在尝试实现一个使用 python multiprocessing 的函数以加快计算速度。我正在尝试创建一个成对距离矩阵,但使用 for 循环的实现需要 8 个多小时。
此代码似乎运行得更快,但是当我打印矩阵时,矩阵中全是零。当我打印函数中的行时,它似乎可以工作。我认为是范围问题,但我不明白如何处理。
import multiprocessing
import time
import numpy as np
def MultiProcessedFunc(i,x):
for j in range(i,len(x)):
time.sleep(0.08)
M[i,j] = (x[i]+x[j])/2
print(M[i,:]) # Check if the operation works
print('')
processes = []
v = [x+1 for x in range(8000)]
M = np.zeros((len(v),len(v)))
for i in range(len(v)):
p = multiprocessing.Process(target = MultiProcessedFunc, args =(i,v))
processes.append(p)
p.start()
for process in processes:
process.join()
end = time.time()
print('Multiprocessing: {}'.format(end-start))
print(M)
【问题讨论】:
-
请注意,如果您所追求的只是成对欧式距离,stackoverflow.com/a/47775357/42610 将为您提供更快的代码。
标签: python python-multiprocessing multiprocess