<p>问题是你没有正确地进行多重处理。具体来说,您的代码缺少<code>if __name__ == '__main__':</code>保护。下面的代码使用了<code>multiprocessing.Pool</code>(我认为这是做你想做的事情的最好和最简单的方法),这是固定的。它仍然需要几秒钟的时间来执行,但它不会占用内存和CPU</p>
<p>有关需要<code>if __name__ == '__main__':</code>的信息隐藏在<code>multiprocessing</code>模块文档的<a href="https://docs.python.org/3/library/multiprocessing.html#the-spawn-and-forkserver-start-methods" rel="nofollow noreferrer"><strong>The <em>^{<cd4>}</em> and <em>^{<cd5>}</em> start methods</strong></a>部分的^{<strong>主模块的安全导入</strong>小节中</p>
<pre><code>import math
import random
import multiprocessing as mp
screenSize = 1000000
pointsLength = 2000
weightLength = 20000
weightBuffer = screenSize/weightLength
pointBuffer = screenSize/pointsLength
points = []
weights = []
weightPoints = []
counter = 0
for i in range(pointsLength):
for j in range(pointsLength):
points.append([random.randint(j * pointBuffer, j * pointBuffer * 2),
random.randint(i * pointBuffer, i * pointBuffer * 2)])
for i in range(pointsLength):
for j in range(pointsLength):
weightPoints.append([j * weightBuffer, i * weightBuffer])
weights.append(0)
def FindDistance(i):
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
if __name__ == '__main__': # ADDED
# With Multiprocessing Pool
sumthing = []
for i in range(len(weights)):
sumthing.append(i)
with mp.Pool(4) as p:
p.map(FindDistance, sumthing)
</code></pre>