Ho osservato questo comportamento durante il tentativo di creare processi figli nidificati in Python. Ecco il programma principale parent_process.py
:Creazione di processi figlio all'interno di un processo secondario con il multiprocesso di Python non riuscito
import multiprocessing
import child_process
pool = multiprocessing.Pool(processes=4)
for i in range(4):
pool.apply_async(child_process.run,())
pool.close()
pool.join()
Il programma principale chiama la funzione "run" nel seguente child_process.py programma figlio:
import multiprocessing
def run():
pool = multiprocessing.Pool(processes=4)
print 'TEST!'
pool.close()
pool.join()
Quando eseguo il programma principale, nulla è stato stampato e il programma è uscito rapidamente. Tuttavia, se print 'TEST!'
viene spostato sopra una riga (prima che i processi figlio nidificati vengano creati), 'TEST!'
vengono stampati per 4 volte.
Poiché gli errori in un processo figlio non vengono stampati sullo schermo, questo sembra mostrare che il programma si arresta in modo anomalo quando un processo figlio crea i propri processi figlio nidificati.
Qualcuno potrebbe spiegare cosa succede dietro la scena? Grazie!
So che esiste un limite di nidificazione che genera un'eccezione ione, ma tu sei lontano da esso in questo caso. Penso che il problema sia da qualche altra parte, forse nel meccanismo del "pool" ... – CoMartel
Cosa stai cercando di migliorare con questo? Non sarai più veloce lanciando pool di 'Pool' che lanciando un più grande' Pool' – CoMartel
@HarryPotfleur L'intenzione era di lasciare che ogni processo figlio gestisse il proprio insieme di processi, quindi il programma sembra logicamente più pulito. Supponiamo di avere 16 core, quindi i processi nidificati 4x4 possono essere eseguiti simultaneamente. Fornisco una soluzione alternativa di seguito. –