Intérprete Python usando apenas 12% de potência da CPU
26
Estou usando python no ubuntu para análise de texto. Apesar da grande quantidade de trabalho, o programa está fazendo o uso da CPU, conforme mostrado no monitor do sistema, permanece consistentemente em 12%.
Mudei a prioridade do programa de Normalpara, Very Highmas isso não teve efeito.
O que limita a quantidade de uso da CPU que meu programa python pode obter e como posso mudar isso, para que o programa possa utilizar mais energia da CPU?
Suponho que você tenha uma CPU com 8 núcleos virtuais (provavelmente com quad-core com hyper-threading)? Isso significa que um thread / núcleo virtual da CPU totalmente carregado é igual a 12,5% da carga total.
O interpretador Python é um aplicativo que é executado apenas como um único processo por padrão e, portanto, não é capaz de tirar proveito de mais de um núcleo virtual. Mesmo que o código que você executa com ele use multithreading, ele ainda usará apenas um encadeamento da CPU / núcleo virtual, devido ao GIL (bloqueio global de intérpretes) .
Somente se o seu programa Python usar multiprocessamento , que de fato inicia várias instâncias do interpretador Python e permite que eles executem suas tarefas verdadeiramente paralelas, você pode tirar proveito de vários núcleos virtuais / threads de CPU. (Como o @SargeBorsch apontou em seu comentário, também existem algumas maneiras avançadas de conseguir isso sem multiprocessamento, mas isso normalmente não é algo que você escreve rapidamente.)
Isso realmente faz muito sentido. Sim, eu estou tendo um quad-core com 4 núcleos (8 núcleos virtuais). Ty
Matthias Herrmann
9
@MatthiasHerrmann Você pode considerar um monitor de sistema para mostrar em que porcentagem cada CPU está operando. Dessa forma, você poderia ver apenas 1 de 8 CPUs em 100%. Aqui está um tópico na AU sobre o assunto: Windows “gadgets” equivalente (para uso de wifi e cpu)?
WinEunuuchs2Unix
7
Não é verdade, é possível usar todos os núcleos do processo python único. Basta ligar para o código C e liberar o GIL. E muitas bibliotecas existentes fazem exatamente isso (numpy por exemplo).
Sarge Borsch
2
Ou use Jythonor IronPython, que não possui um GIL.
Pare de prejudicar Monica
19
Outra possibilidade, menos provável neste caso, é que o programa esteja ligado ao disco, ou seja, esteja lendo e gravando no / para o disco que esteja lento e a CPU esteja aguardando o disco.
Jython
orIronPython
, que não possui um GIL.Outra possibilidade, menos provável neste caso, é que o programa esteja ligado ao disco, ou seja, esteja lendo e gravando no / para o disco que esteja lento e a CPU esteja aguardando o disco.
fonte
iotop
para monitorar programas vinculados ao iowait