Почему моя программа Python составляет в среднем только 33% ЦП для каждого процесса? Как я могу заставить Python использовать весь доступный ЦП?

При использовании Windows PowerShell можно сделать следующее:

Get-Content someFile.txt -wait

11
задан tzot 6 December 2009 в 09:42
поделиться

7 ответов

Похоже, у вас 3-ядерный процессор. Если вы хотите использовать более одного ядра ЦП в собственном коде Python, вам необходимо запустить несколько процессов. (Два или более потока Python не могут работать одновременно на разных процессорах)

Как R. Пейт сказал, что модуль многопроцессорной обработки Python является односторонним. Однако я бы посоветовал вместо этого взглянуть на Parallel Python . Он заботится о распределении задач и передаче сообщений. Вы даже можете запускать задачи на множестве отдельных компьютеров с небольшим изменением кода.

Использовать его довольно просто:

import pp

def parallel_function(arg):
    return arg

job_server = pp.Server() 

# Define your jobs
job1 = job_server.submit(parallel_function, ("foo",))
job2 = job_server.submit(parallel_function, ("bar",))

# Compute and retrieve answers for the jobs.
print job1()
print job2()
34
ответ дан 3 December 2019 в 00:43
поделиться

Попробуйте модуль multiprocessing , как Python, хотя и имеет настоящие собственные потоки, ограничивает их одновременное использование, пока сохраняется GIL. Другая альтернатива, на которую вы должны обратить внимание, если вам нужна реальная скорость, - это написание модуля расширения C и вызов в нем функций из Python. Вы можете освободить GIL в этих функциях C.

См. Также Дэвида Бизли Mindblowing GIL .

25
ответ дан 3 December 2019 в 00:43
поделиться

А как насчет Безстековый Python ?

1
ответ дан 3 December 2019 в 00:43
поделиться

Вам следует выполнить мониторинг операционной системы и Python, чтобы определить где находится бутылочное горлышко.

Вот некоторая информация для Windows 7:

Performance Monitor : вы можете использовать Windows Performance Monitor, чтобы исследовать, как программы, которые вы запускаете, влияют на производительность вашего компьютера, как в режиме реального времени, так и путем сбора данные журнала для последующего анализа. ( Панель управления-> Все элементы панели управления-> Информация о производительности и инструменты-> Дополнительные инструменты-> Просмотр монитора производительности)

Монитор ресурсов : Монитор ресурсов Windows - это системный инструмент, который позволяет просматривать информацию об использовании ресурсов оборудования (ЦП, память, диск и сеть) и программного обеспечения (дескрипторы файлов и модули) в режиме реального времени. Вы можете использовать Resource Monitor для запуска, остановки, приостановки и возобновления процессов и служб. ( Панель управления-> Все элементы панели управления-> Информация о производительности и инструменты-> Дополнительные инструменты-> Просмотр монитора ресурсов )

0
ответ дан 3 December 2019 в 00:43
поделиться

Глобальная блокировка интерпретатора

Причины использования такой блокировки включают:

 * повышенная скорость однопоточных программ (нет необходимости устанавливать или снимать блокировки
 по всем структурам данных отдельно)
* простая интеграция библиотек C, которые обычно не являются потокобезопасными.

Приложения, написанные на языках с GIL должен использовать отдельные процессы (т.е. переводчики) для достижения полной параллелизм, так как каждый интерпретатор имеет собственный GIL.

11
ответ дан 3 December 2019 в 00:43
поделиться

Узкое место, вероятно, где-то еще, например, жесткий диск (подкачка) или доступ к памяти.

0
ответ дан 3 December 2019 в 00:43
поделиться

Судя по загрузке процессора, похоже, что вы все еще работаете на одном ядре. Попробуйте выполнить тривиальный расчет с 3 или более потоками с одним и тем же кодом потоков и посмотрите, все ли ядра используются. Если это не так, возможно, что-то не так с вашим кодом потоковой передачи.

1
ответ дан 3 December 2019 в 00:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: