Почему моя программа на Python занимает в среднем только 33% процессорного времени на процесс? Как я могу заставить Python использовать все доступные процессоры? - PullRequest
10 голосов
/ 16 ноября 2009

Я использую Python 2.5.4. Мой компьютер: процессор AMD Phenom X3 720BE, материнская плата 780G, 4 ГБ оперативной памяти, Windows 7 32 бит.

Я использую потоки Python, но не могу заставить каждый процесс python.exe использовать 100% ЦП. Почему они используют в среднем только 33-34%?

Я хочу направить все доступные компьютерные ресурсы на эти большие вычисления, чтобы завершить их как можно быстрее.

EDIT: Спасибо всем. Сейчас я использую Parallel Python, и все работает хорошо. Мой процессор сейчас всегда на 100%. Спасибо всем!

Ответы [ 7 ]

33 голосов
/ 16 ноября 2009

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

Как R. Пейт сказал, что модуль Python multiprocessing является одним из способов. Однако я бы посоветовал вместо этого взглянуть на 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()
25 голосов
/ 16 ноября 2009

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

Также см. Дэвид Бизли х Сногсшибательный GIL .

11 голосов
/ 16 ноября 2009

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

Причины использования такого замка:

* increased speed of single-threaded programs (no necessity to acquire or release locks
  on all data structures separately)
* easy integration of C libraries that usually are not thread-safe.

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

1 голос
/ 16 ноября 2009

А как насчет Stackless Python ?

1 голос
/ 16 ноября 2009

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

0 голосов
/ 16 ноября 2009

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

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

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

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

0 голосов
/ 16 ноября 2009

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

...