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?
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.
Jython
lubIronPython
, które nie mają GIL.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.
źródło
iotop
monitorować programy powiązane z iowait