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?
7
A
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.
Grazie, funziona. Sto usando initializer + setproctitle. – alasarr
@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. –