У меня есть тупой кусок кода (blah.py), который просто загружает процессор:
if __name__ == "__main__":
while True:
startTime = perf_counter()
primes = []
for possiblePrime in range(2, 40000):
# Assume number is prime until shown it is not.
isPrime = True
for num in range(2, possiblePrime):
if possiblePrime % num == 0:
isPrime = False
break
if isPrime:
primes.append(possiblePrime)
print(f'Took {perf_counter() - startTime}s')
Тогда я просто запускаю его в нескольких оболочках одновременно, как: cmd python.exe blah.py
Я вижу, что время выполнения зависит от количества запущенных процессов.
proc. # time
1 8.9s
2 9.6s
4 11.1s
8 17.3s
Те же симптомы при использовании процесса Pool и т. Д.
Система: Windows 10 64-битная, CPU i7 4 ядра (8 логических), 8 ГБ ОЗУ, Python 3.6.3 | Anaconda custom (64-битная) | (по умолчанию 15 октября 2017 г., 03:27:45) [MSC v.1900 64 бит (AMD64)] на win32
Почему программа python ведет себя так?
Может быть, происходит какое-то скрытое межпроцессное взаимодействие или какая-то глобальная блокировка, о которой я не знаю (на самом деле GIL?), Или это может быть экзотическая настройка Anaconda для среды Python.
Как побороть такую проблему?
Спасибо заранее всем откликнувшимся.
P.S. При запуске реального кода на 32-ядерном сервере производительность резко падает.