2014-11-14 3 views
7

Se creo un pool con 4 worker e li imposto per eseguire alcune attività (utilizzando pool.apply_async(..)), posso accedere al nome di ciascun processo dall'interno utilizzando multiprocessing.current_process().name, ma come faccio a impostare il nome dal processo padre (questo è principalmente per la registrazione)?Come denominare i processi in un multiprocessing.pool?

risposta

4

Process.name è just a setter, è possibile assegnarlo liberamente.

Il pool accetta un argomento initializer. Questo può essere qualsiasi chiamabile, e verrà chiamato una volta all'avvio di ciascun sottoprocesso. Puoi puntare questo a una funzione che imposta la proprietà name di quel processo su qualsiasi cosa tu voglia.

+0

Grazie, funziona. Sto usando initializer + setproctitle. – alasarr

+0

@TkTech @Signamente @alasar in una funzione che utilizzo come ** inizializzatore ** per il pool, ho impostato il nome del processo usando 'multiprocessing.current_process(). Name = 'some string'' e usa l'attributo log record ** % (processName) s ** nel formattatore di registrazione, ma ancora nei messaggi di registro vedo i nomi predefiniti creati per i processi (Ex. PoolWorker-1, PoolWorker-2) e non il nome che sto impostando per il processo nell'inizializzatore funzione. Potresti dirmi cosa c'è che non va. –