Інтерпретатор Python використовує лише 12% потужності процесора


26

Я використовую python на ubuntu для аналізу тексту. Незважаючи на важкий обсяг роботи, програма виконує використання процесора, як показано на системному моніторі, постійно дорівнює 12%.

Я змінив пріоритет програми з Normalна, Very Highале це не мало ефекту.

Що обмежує кількість використання процесора, яку може отримати моя програма python, і як я можу це змінити, щоб програма могла використовувати більшу потужність процесора?

Відповіді:


73

Я припускаю, що у вас є процесор з 8 віртуальними ядрами (напевно, чотирьохядерний з гіпер-нарізкою)? Це означає, що один повністю завантажений процесорний потік / віртуальне ядро ​​дорівнює 12,5% загального навантаження.

Інтерпретатор Python - це програма, яка за замовчуванням працює лише як один єдиний процес, тому не може скористатися більш ніж одним віртуальним ядром. Навіть якщо код, який ви запускаєте з ним, використовує багатопотоковість, він все одно використовуватиме лише один потік / віртуальне ядро ​​CPU через GIL (глобальний замок інтерпретатора) .

Тільки якщо у вашій програмі Python використовується багатопроцесорний процес , який насправді запускає кілька екземплярів інтерпретатора Python і дозволяє їм виконувати завдання справді паралельно, ви можете скористатися кількома віртуальними ядрами / потоками процесора. (Як зазначив @SargeBorsch у своєму коментарі, існують також деякі просунуті способи досягти цього без багатопроцесорної обробки, але це зазвичай не те, що ви швидко пишете самі.)


Це насправді має багато сенсу. Так, у мене чотириядерний з 4 ядрами (8 віртуальних ядер). Ty
Маттіас Геррман

9
@MatthiasHerrmann Ви можете розглянути системний монітор, щоб показати, у якому відсотку працює кожен процесор. Таким чином, ви могли бачити лише 1 з 8 процесорів на 100%. Ось одна тема в АС на цю тему: Еквівалент "гаджетів" Windows (для використання Wi-Fi та процесора)?
WinEunuuchs2Unix

7
Неправда, можна використовувати всі ядра з одного процесу пітона. Потрібно просто зателефонувати на код C і випустити GIL. І багато існуючих бібліотек роблять саме це (наприклад, numpy).
Sarge Borsch

2
Або використовувати Jythonабо IronPython, які не мають GIL.
Зупиніть шкодити Моніці

19

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


5
спробуйте iotopвідстежувати програми, пов'язані з iowait
кішка

1
Або сам код є синхронним і блокуючим.
Зиднар

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