Perfil de multiproceso Python

Estoy luchando para descubrir cómo perfilar un script de python multiproceso simple

import multiprocessing import cProfile import time def worker(num): time.sleep(3) print 'Worker:', num if __name__ == '__main__': for i in range(5): p = multiprocessing.Process(target=worker, args=(i,)) cProfile.run('p.start()', 'prof%d.prof' %i) 

Estoy iniciando 5 procesos y, por lo tanto, cProfile genera 5 archivos diferentes. Dentro de cada una, quiero ver que mi método ‘worker’ tarda aproximadamente 3 segundos en ejecutarse, pero en lugar de eso solo veo lo que ocurre dentro del método ‘start’.

Apreciaría mucho si alguien me pudiera explicar esto.

Actualización: Ejemplo de trabajo basado en la respuesta aceptada:

 import multiprocessing import cProfile import time def test(num): time.sleep(3) print 'Worker:', num def worker(num): cProfile.runctx('test(num)', globals(), locals(), 'prof%d.prof' %num) if __name__ == '__main__': for i in range(5): p = multiprocessing.Process(target=worker, args=(i,)) p.start() 

Está perfilando el inicio del proceso, por lo que solo ve lo que ocurre en p.start() como usted dice, y p.start() regresa una vez que se inicia el subproceso. Debe crear un perfil dentro del método de worker , que se llamará en los subprocesos.