Программа Python замедляется по мере роста числа процессов. Зачем? Как побороть? - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть тупой кусок кода (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-ядерном сервере производительность резко падает.

...