Come ottimizzare l'utilizzo della CPU di un sottoprocesso Python?

1

Ho uno script Python che avvia un eseguibile in C ++.

L'eseguibile C ++ è un programma multithread che richiede in genere diverse ore di esecuzione. Il modo in cui il codice C ++ viene scritto, verrà eseguito su tutti i core della CPU, se possibile.

Tuttavia, quando eseguo lo script Python e controllo il mio task manager, ho letto che lo script Python utilizza solo il 30% della mia CPU. Penso che questo 30% includa l'utilizzo della CPU del sottoprocesso che esegue anche l'eseguibile, perché l'eseguibile appare nel task manager con l'utilizzo della CPU pari allo 0% (ma è effettivamente in esecuzione e produce risultati). A volte l'eseguibile raggiunge il 7% di utilizzo della CPU e torna indietro allo 0%.

C'è un modo per aumentare l'utilizzo della CPU di questo sottoprocesso per risparmiare tempo?

EDIT: Forse dovrei specificare che questo script Python sta comunicando con il sottoprocesso del C ++ attraverso una pipe. Mentre è in esecuzione, il sottoprocesso invia molte informazioni attraverso la pipe che lo script Python carica su un database che potrebbe spiegare l'elevato utilizzo della CPU dello script.

    
posta Chuque 31.03.2017 - 05:01
fonte

2 risposte

2

The way the C++ code is written, it will run on all the cores of the CPU if possible

Bene, in realtà hai provato questo , o lo presumi? Cosa succede se il tuo C ++ viene avviato direttamente dalla riga di comando?

However, when I run the Python script and check my task manager, I read that the Python script is only using 30% of my CPU. I think this 30% includes the CPU usage of the subprocess running the executable as well

Questo è decisamente sbagliato. Se il tuo script Python usa il 30% della CPU, sta facendo il lavoro da solo, e non il sottoprocesso. Impossibile dire cosa fa il tuo script senza vedere il codice, ma la mia ipotesi migliore è che probabilmente spreca i cicli della CPU aspettando la fine del sottoprocesso in un modo molto inefficiente.

the executable appears in the task manager with 0% CPU usage (but it's indeed running and producing results

Questo comportamento potrebbe verificarsi quando l'eseguibile viene eseguito con una priorità bassa, mentre il processo Python ha una priorità più alta e blocca l'esecuzione del programma C ++. Altre cose che potrebbero imporre un comportamento di blocco sono l'accesso ai file condivisi o altri accessi alle risorse condivise. Vorrei controllare per questo tipo di cose.

    
risposta data 31.03.2017 - 13:23
fonte
0

I thread Python non sono validi per il carico associato alla CPU, funzionano solo bene per il carico associato all'I / O, a causa della globale blocco dell'interprete (aka GIL) .

Se si desidera utilizzare tutti i core con un'attività associata alla CPU, utilizzare più processi Python , o usare una lingua diversa.

    
risposta data 31.03.2017 - 22:28
fonte

Leggi altre domande sui tag