Come aumentare l'utilizzo della CPU di Python


21

Uso Python per eseguire alcuni algoritmi e indipendentemente da Python che uso, e ho provato molte versioni, l'utilizzo della CPU arriva al 25% massimo. Perché Python non sfrutta il resto delle risorse della mia CPU? Ho cambiato la priorità del servizio da normale ad alto e successivamente a tempo reale, con riavvii nel mezzo, ma nulla è cambiato.

C'è un modo per fare in modo che Python usi il 50% o anche più della mia CPU?


la tua cpu è una cpu multicore?
Journeyman Geek

sì, è un i5-480M e nel pannello di controllo> opzioni di alimentazione> cpu min / max è al 100%
Christos K.

Risposte:


20

Molto semplicemente, stai eseguendo una singola applicazione thread in un sistema con 4 core logici - come tale, hai un processo, usando tutto il core.

Dovrai (e questo non è banale) dovrai riscrivere l'algoritmo per essere multi-thread, o vedere se puoi semplicemente eseguire 2 o più istanze, su core specifici per usare più della tua CPU. Non c'è altro modo.


Avevo paura che questo fosse il caso, ma nei diagrammi di utilizzo della CPU nel Task Manager di Windows non vedo 1 diagramma essere selezionato mentre l'algoritmo viene eseguito, al contrario li vedo tutti con un aumento significativo.
Christos K.,

1
Il sistema sta bilanciando il carico tra i core. Tuttavia, non vengono utilizzati due core contemporaneamente.
gronostaj,

ragazzi, avete confermato le mie paure, sembra che sia ora che inizi a leggere sul threading
Christos K.,

@ fractal_7: il threading potrebbe non portare i benefici che ti aspetti. Vedi la mia risposta qui sotto.
Roland Smith,

15

Il linguaggio Python precede le CPU multi-core, quindi non è strano che non le usi in modo nativo.

Inoltre, non tutti i programmi possono beneficiare di più core. Un calcolo eseguito in passaggi, in cui il passaggio successivo dipende dai risultati del passaggio precedente, non sarà più veloce utilizzando più core. I problemi che possono essere vettorizzati (applicando lo stesso calcolo a grandi matrici di dati) possono essere relativamente facili da usare per usare più core perché i singoli calcoli sono indipendenti.

Quando stai facendo molti calcoli, presumo che stai usando numpy ? In caso contrario, dai un'occhiata. È un'estensione scritta in C che può utilizzare librerie di algebra lineare ottimizzate come ATLAS. Può velocizzare notevolmente i calcoli numerici rispetto allo standard Python.

Detto questo, ci sono diversi modi per usare più core con Python.

  • Il multiprocessingmodulo è integrato. La multiprocessing.Poolclasse fornisce la vettorializzazione su più CPU con i map()metodi e relativi. C'è però un compromesso qui. Se è necessario comunicare grandi quantità di dati tra i processi, l'overhead potrebbe annullare il vantaggio di più core.
  • Usa una build adatta di numpy. Se numpy è costruito con una libreria ATLAS multithreading, sarà più veloce su grandi problemi.
  • Usa moduli di estensione come numexpr , parallel python , corepy o Copenhagen Vector Byte Code .

Si noti che il threadingmodulo non è poi così utile in questo senso. Per semplificare la gestione della memoria, il blocco dell'interprete globale ("GIL") impone che solo un thread alla volta possa eseguire il bytecode python. Tuttavia, moduli esterni come numpy possono utilizzare internamente più thread.


Finora ho usato Python 2.7 Ironpython e ho provato Pypy. darò una possibilità al numpy. ma dovrò comunque leggere prima di poter utilizzare qualsiasi modulo multiprocessore.
Christos K.,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.