Python Interpreter zużywa tylko 12% mocy procesora


26

Używam Pythona na Ubuntu do analizy tekstu. Pomimo dużej ilości pracy program wykonuje użycie procesora, jak pokazano na monitorze systemowym, stale wynosi 12%.

Zmieniłem priorytet programu z Normalna, Very Highale to nie przyniosło efektu.

Co ogranicza wykorzystanie procesora przez mój program python i jak mogę to zmienić, aby program mógł zużywać więcej mocy procesora?

Odpowiedzi:


73

Zakładam, że masz procesor z 8 wirtualnymi rdzeniami (prawdopodobnie czterordzeniowy z hiperwątkowością)? Oznacza to, że jeden w pełni obciążony wątek procesora / wirtualny rdzeń wynosi 12,5% całkowitego obciążenia.

Interpretator Python jest aplikacją, która domyślnie działa tylko jako jeden proces i dlatego nie może korzystać z więcej niż jednego wirtualnego rdzenia. Nawet jeśli kod, który uruchamiasz z nim, korzysta z wielowątkowości, nadal będzie używał tylko jednego wątku procesora / wirtualnego rdzenia, z powodu GIL (globalnej blokady interpretera) .

Tylko wtedy, gdy używa programu Python wieloprocesorowe , które w rzeczywistości zaczyna się wiele wystąpień interpreter Pythona i pozwala im wykonywać twoje zadania prawdziwie równoległe, można skorzystać z wielu wirtualnych rdzeni / wątków procesora. (Jak zauważył @SargeBorsch w swoim komentarzu, istnieją również zaawansowane sposoby osiągnięcia tego bez wieloprocesowego przetwarzania, ale zwykle nie jest to coś, co szybko piszesz sam.)


To naprawdę ma sens. Tak, mam czterordzeniowy z 4 rdzeniami (8 rdzeni wirtualnych). Ty
Matthias Herrmann

9
@MatthiasHerrmann Możesz rozważyć monitorowanie systemu, aby pokazać, na jakim procencie pracuje każdy procesor. W ten sposób mogłeś zobaczyć tylko 1 z 8 procesorów na 100%. Oto jeden wątek w AU na ten temat: odpowiednik „gadżetów” systemu Windows (do korzystania z Wi-Fi i procesora)?
WinEunuuchs2Unix

7
Nieprawda, można dobrze wykorzystać wszystkie rdzenie z pojedynczego procesu Pythona. Wystarczy wywołać kod C i zwolnić GIL. I wiele istniejących bibliotek robi dokładnie to (na przykład numpy).
Sarge Barszcz

2
Lub użyj Jythonlub IronPython, które nie mają GIL.
Stop Harming Monica,

19

Inną możliwością, mniej prawdopodobną w tym przypadku, jest to, że program jest związany z dyskiem, tj. Odczytuje i zapisuje na / z dysku, który jest wolny, a procesor czeka na dysk.


5
spróbuj iotopmonitorować programy powiązane z iowait
cat

1
Albo sam kod jest synchroniczny i blokuje.
Zydnar

To był mój błąd bardzo dziękuję
Fipsi
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.