Як збільшити використання процесора Python


21

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

Чи є спосіб змусити Python використовувати 50% або навіть більше мого процесора?


ваш процесор багатоядерний процесор?
Подорожник Geek

так, це i5-480M, а на панелі управління> параметри харчування> процесорний хв / макс. це 100%
Крістос К.

Відповіді:


20

Простіше кажучи, ви запускаєте одну потокову програму в системі з чотирма логічними ядрами - таким чином у вас є один процес, використовуючи все ядро.

Вам буде потрібно (і це не тривіально), щоб переписати алгоритм, який буде багатопоточним, або побачити, чи ви можете просто запустити 2 або більше екземплярів на конкретних ядрах, щоб використовувати більше вашого процесора. Іншого шляху немає.


Я побоювався, що це станеться так, але в діаграмах використання процесора у менеджері завдань Windows я не бачу, щоб 1 діаграма була на ньому, коли алгоритм виконується, навпаки, я бачу всіх із значним збільшенням.
Крістос К.

1
Ваша система врівноважує навантаження між ядрами. Все-таки не використовуються відразу два ядра.
gronostaj

хлопці, ви підтвердили мої страхи, здається, саме час я починаю читати про нарізування
Крістос К.

@ fractal_7: Нитка може не принести очікуваних переваг. Дивіться мою відповідь нижче.
Роланд Сміт

15

Мова Python передує багатоядерним процесорам, тому не дивно, що він не використовує їх власне.

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

Коли ви робите багато розрахунків, я припускаю, що ви використовуєте numpy ? Якщо ні, перевірте це. Це розширення, написане на C, яке може використовувати оптимізовані бібліотеки лінійних алгебр, таких як ATLAS. Це може значно прискорити числові обчислення порівняно зі стандартним Python.

Сказавши це, існує кілька способів використання декількох ядер з python.

  • Вбудований multiprocessingмодуль. multiprocessing.PoolКлас надає векторизації по декільком процесорам з map()і пов'язаними з ними методами. Тут є компроміс. Якщо вам доведеться передавати велику кількість даних між процесами, то накладні витрати можуть заперечувати перевагу декількох ядер.
  • Використовуйте підходящу конструкцію з нумію. Якщо numpy побудований з багатопотоковою бібліотекою ATLAS, це буде швидше при великих проблемах.
  • Використовуйте модулі розширення, такі як numexpr , паралельний пітон , corepy або кодекс Байта .

Зауважте, що threadingмодуль не є таким корисним у цьому плані. Щоб забезпечити просте управління пам’яттю, глобальне блокування інтерпретатора («GIL») застосовує, що лише один потік одночасно може виконувати байт-код python. Однак зовнішні модулі, такі як numpy, можуть використовувати декілька потоків всередині.


Поки я використовував python 2.7 ironpython і спробував pypy. я дам шалений шанс. але все ж мені доведеться прочитати, перш ніж я зможу використовувати будь-який багатопроцесорний модуль.
Крістос К.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.