Как увеличить загрузку процессора Python

Я использую Python для выполнения некоторых алгоритмов и независимо от того, какой Python я использую, и я пробовал много версий, использование процессора идет до 25% максимум. Почему Python не использует остальные ресурсы процессора? Я изменил приоритет службы с нормального на высокий, а затем на реальное время, с перезапусками между ними, но ничего не изменилось.

есть ли способ заставить Python использовать 50% или даже больше моего процессора ?

26
задан martineau
18.02.2023 19:28 Количество просмотров материала 2951
Распечатать страницу

2 ответа

проще говоря, вы запускаете однопоточное приложение в системе с 4 логическими ядрами-таким образом, у вас есть один процесс, использующий все ядро.

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

14
отвечен Journeyman Geek 2023-02-20 03:16

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

кроме того, не все программы могут получать прибыль от нескольких ядер. Вычисление, выполняемое шагами, где следующий шаг зависит от результатов предыдущего шага, не будет выполняться быстрее, если используется больше ядер. Проблемы, которые могут быть векторизовать (прикладывающ такое же вычисление к большим массивам данных) можно относительно легко сделать для использования множественных Ядров потому что индивидуал вычисления независимы.

когда вы делаете много расчетов, я предполагаю, что вы используете включает в себя? Если нет, то проверьте его. Это расширение, написанное на C, которое может использовать оптимизированные библиотеки линейной алгебры, такие как ATLAS. Это может значительно ускорить численные расчеты по сравнению со стандартным python.

сказав это, есть несколько способов использовать несколько ядер с python.

  • встроенный-это multiprocessing модуль. Тот multiprocessing.Pool класс обеспечивает векторизацию между несколькими процессорами с помощью map() и связанных с ним методов. Однако здесь есть компромисс. Если необходимо передавать большие объемы данных между процессами, это может свести на нет преимущества нескольких ядер.
  • используйте подходящую сборку numpy. Если numpy построен с многопоточной библиотекой ATLAS, он будет быстрее при больших проблемах.
  • использовать модули расширения, такие как numexpr,параллельно python,corepy или Копенгаген Векторный Байтовый Код.

отметим, что threading модуль не все, что полезно в этом отношении. Чтобы упростить управление памятью, глобальная блокировка интерпретатора ("GIL") обеспечивает выполнение байт-кода python только одним потоком одновременно. Однако внешние модули, такие как numpy, могут использовать несколько потоков внутри.

11
отвечен Roland Smith 2023-02-20 05:33

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх