擅长:python、mysql、java
<p>您正在迭代权重的长度(根据您的代码为2000),并为每次迭代生成一个新进程,这意味着2000个进程。
难怪CPU和RAM都满了</p>
<p>您需要做的是将权重数组分块成8个较小的数组,最好长度相等。更改FindInstance函数以将数组作为参数。此参数将是较小的分块数组</p>
<pre><code>def FindDistance(i_arr):
for i in i_arr:
row = math.floor((i / weightLength) / (weightLength / pointsLength))
col = math.floor((i % weightLength) / (weightLength / pointsLength))
points1d = (pointsLength * row) + col
dist = math.dist(points[points1d], weightPoints[i])
weights[i] = dist
def chunking(weights):
# initialise array of empty arrays with Length equal to number of processors
smaller_chunks = [ [] i for i in range(8) ]
for index,item in enumerate(weights):
index_to_push = index % 8
smaller_chunks[index_to_push].append(item)
return smaller_chunks
processes = []
chunks = chunking(weights)
for i in range(len(chunks)):
p = mp.Process(target=FindDistance, args=[i])
p.start()
processes.append(p)
for process in processes:
process.join()
</code></pre>