<p>问题在于您正在<code>weights</code>的长度上循环。从你的代码中选择哪个</p>
<pre><code>for i in range(pointsLength): #pointsLength is 2000
for j in range(pointsLength):
weightPoints.append([j * weightBuffer, i * weightBuffer])
weights.append(0)
</code></pre>
<p>是2000*2000=40000吗</p>
<p>因此,您试图同时创建40000个新进程,导致系统崩溃。
相反,您可以将<code>weights</code>列表分解为<code>n</code>个较小的数组,并使用这些数组创建<code>n</code>个新进程</p>
<p>我们可以使用numpy函数<code>numpy.array_split</code>分割数组。
现在更新<code>FindDistance</code>函数以接受整个新数组作为输入</p>
<pre><code>def FindDistance(subarr):
for i in subarr:
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
</code></pre>
<p>最后用新参数创建<code>n</code>进程</p>
<pre><code>subarrays = np.array_split(weights, n)
processes = []
for subarr in subarrays:
p = mp.Process(target=FindDistance, args=[subarr])
p.start()
processes.append(p)
for process in processes:
process.join()
</code></pre>