我有一个numpy数组(矩阵),我想用异步填充计算值。因此,我希望矩阵距离与计算值,但最后我收到填充默认值(-1)的矩阵。我明白,在线程之间共享距离有问题,但我无法弄清楚究竟是什么错误。
import numpy as np
import concurrent.futures
data = range(1, 10)
amount = len(data)
default = -1
distances = np.full((amount, amount), default, dtype=np.float32)
def calculate_distance(i, j):
global distances
if i == j:
distances[i][j] = 0
else:
calculated = data[i] + data[j] #doesn't matter how is this calculated
distances[i][j] = calculated
distances[j][i] = calculated
with concurrent.futures.ProcessPoolExecutor() as executor:
for i in range(0, amount):
for j in range(i, amount):
future = executor.submit(calculate_distance, i, j)
result = future.result()
executor.shutdown(True)
print(distances)
答案 0 :(得分:0)
您正在使用__exit__
。这将分叉执行工作的新流程。这些进程不会共享内存,而是分别获取ProcessPoolExecutor
矩阵的副本。
因此,对副本的任何更改肯定不会反映在原始流程中。
尝试使用distances
代替。
注意:通常会看到全局错误...将数组传递给函数。