Windows 7 автоматически использует несколько процессоров для кода Python 3? - PullRequest
4 голосов
/ 26 августа 2010

У меня Windows 7, и я написал программу на python, которая зацикливается («для циклов», т. Е. «Для ключа в dict») на несколько баз данных, проверяет различные условия (например, если x в dict, y + = 1) и затем подсчитывает результаты.Я ничего не сделал, чтобы упорядочить происходящее.У меня 8 процессорных ядер на моем компьютере.Когда я запускаю диспетчер задач Windows во время работы программы, он показывает значительную активность на всех 8 ядрах.Windows выполняет циклы for в parralel на нескольких процессорах, а я ничего не делаю?Код выполняется быстро.

Ответы [ 2 ]

4 голосов
/ 26 августа 2010

Нет.Реализация Python на C позволяет только одному потоку интерпретировать один байт-код за раз.Единственный способ использовать преимущества нескольких ядер - использовать несколько потоков или несколько процессов.

Вполне возможно, что вы увидите несколько основных действий, связанных с вашим сценарием.Допустим, вы открываете несколько файлов для чтения или записи.ОС будет буферизовать вызовы чтения / записи, которые выполняет Python (от имени вашего скрипта), и в некоторых случаях вернет управление следующему оператору до его завершения.Однако именно ОС, а не Python делает эту оптимизацию.

Java-реализация Python будет делать то же, что и нативная версия Java в вашей ОС.

Здесь - более полное обсуждение той же темы.

2 голосов
/ 26 августа 2010

Ответ на ваш вопрос «нет» - что бы ни происходило на 7 из ваших 8 ядер, это Windows делает свои вещи (службы и все такое) «в фоновом режиме». Если вы хотите распараллелить несколько ядер, вам потребуется использовать модуль многопроцессорной стандартной библиотеки Python (есть и другие способы, но ни один из них не такой удобный, как этот).

...