Я использую 64-разрядную версию Ubuntu 17.04 с процессором Intel® Core ™ i7-7500U с процессором 2,70 ГГц × 4 и 16 ГБ оперативной памяти. Системный монитор показывает 3 процесса python и при просмотре ресурсов используется только 1 ядро до 100%, остальные 3 - всего 2-3%.
Насколько мне известно, отдельные процессы выполняются на отдельные ядра, [? d1]
Выполняемый код:
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')
Ваше многопоточное воспроизведение отлично, но выполняемый код не является тем, что вы ожидаете.
Попробуйте запустить этот код
def boom1():
print(5**10000000000)
if __name__=="__main__":
print('Done')
Да, функция boom1 не вызывается, но вы увидите, что 1 поток по-прежнему пытается «что-то», и он берет навсегда. Фактически, это «что-то» - это ConstantExpressionEvaluator - он пытается прекомпопировать постоянные выражения по соображениям производительности, но ваша константа настолько велика, что требуется все время для завершения.
Что-то вроде этого
def boom1():
z = 5 ** 10
z = z ** 1000000000
print(z)
Ваше многопоточное воспроизведение отлично, но выполняемый код не является тем, что вы ожидаете.
Попробуйте запустить этот код
def boom1():
print(5**10000000000)
if __name__=="__main__":
print('Done')
Да, функция boom1 не вызывается, но вы увидите, что 1 поток по-прежнему пытается «что-то», и он берет навсегда. Фактически, это «что-то» - это ConstantExpressionEvaluator - он пытается прекомпопировать постоянные выражения по соображениям производительности, но ваша константа настолько велика, что требуется все время для завершения.
Что-то вроде этого
def boom1():
z = 5 ** 10
z = z ** 1000000000
print(z)