我使用的是 Ubuntu 17.04 64 位,处理器为 Intel® Core™ i7-7500U CPU @ 2.70GHz × 4 和 16GB RAM。系统监视器显示 3 个 Python 进程,查看资源后发现,只有 1 个核心利用率达到 100%,其余 3 个仅为 2-3%。
据我所知,不同的进程在不同的核心上执行,对吗?
正在执行的代码是:
import time
import multiprocessing
def boom1(*args):
print(5**10000000000)
def boom2(*args):
print(5**10000000000)
def boom3(*args):
print(5**10000000000)
def boom4(*args):
print(5**10000000000)
if __name__=="__main__":
array = []
p1 = multiprocessing.Process(target=boom1, args=(array,))
p2 = multiprocessing.Process(target=boom1, args=(array,))
p3 = multiprocessing.Process(target=boom1, args=(array,))
p4 = multiprocessing.Process(target=boom1, args=(array,))
p1.start()
p2.start()
p3.start()
p4.start()
p1.join()
p2.join()
p3.join()
p4.join()
print('Done')
答案1
您的多线程非常好,但执行的代码并不符合您的预期。
尝试运行此代码
def boom1():
print(5**10000000000)
if __name__=="__main__":
print('Done')
是的,boom1 函数未被调用,但您会看到 1 个线程仍在尝试执行“某事”,并且需要很长时间。实际上,这个“某事”是 ConstantExpressionEvaluator - 出于性能原因,它会尝试预先计算常量表达式,但您的常量太大,以至于需要花费所有时间才能完成。要打破这种单线程优化并并行运行代码,只需在计算中添加这个额外的步骤。
像这样
def boom1():
z = 5 ** 10
z = z ** 1000000000
print(z)