2012-07-18 11 views
5

Sto giocando con il modulo di multiprocessing di python e volevo essere in grado di visualizzare il nome del processo attualmente in esecuzione.multiprocessing di python - accedere al nome del processo all'interno della funzione chiamata con Process.start (target = func)

Se creo una classe che eredita da MyProcess personalizzato multiprocessing.Process posso stampare il nome del processo nel modo seguente

from multiprocessing import Process 

class MyProcess(Process): 
    def __init__(self): 
     Process.__init__(self) 

    def run(self): 
     #do something nasty and print the name 
     print self.name 

p = MyProcess() 
p.start() 

Tuttavia, se sto creando processi utilizzando il costruttore della classe Process

from multiprocessing import Process 
def somefunc(): 
    print Process.name     #1 

p = Process(target=somefunc) 
p.start() 
print p.name       #2 

# 2 funziona ma # 1 no. c'è un modo per stampare il nome del processo attualmente in esecuzione all'interno di somefunc?

risposta

7

È possibile utilizzare la funzione current_process:

from multiprocessing import Process, current_process 

def somefunc(): 
    print current_process().name 

if __name__ == '__main__': 
    p = Process(target=somefunc) 
    p.start() 
    print p.name 
+0

va bene, ora alla ricerca di current_process nella documentazione ho trovato il metodo a http://docs.python.org/library/multiprocessing.html#miscellaneous indovinare , Ho bisogno di RTFM con un po 'più di pazienza e concentrazione :) –

+0

@AnuvratParashar E' già collegato sopra :) – schlamar

+0

oh sì davvero! –

3

Invece di passare l'argomento target, ignorare il metodo run. Da lì, è possibile richiamare someFunc e passare l'oggetto processo ad esso.

Il nome non è un concetto a livello di sistema operativo. È di livello Python e non è automatico che il processo che esegui abbia anche un oggetto Process ovunque.

Problemi correlati