multihilos - Perfiles de multiprocesamiento de Python
multihilos en python (1)
Estás perfilando el inicio del proceso, por lo que solo estás viendo lo que sucede en p.start()
como dices, y p.start()
regresa una vez que se inicia el subproceso. Necesita crear un perfil dentro del método de worker
, que se llamará en los subprocesos.
Estoy luchando para descubrir cómo crear un perfil de una secuencia de comandos 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 comenzando 5 procesos y, por lo tanto, cProfile genera 5 archivos diferentes. Dentro de cada uno quiero ver que mi método ''trabajador'' tarda aproximadamente 3 segundos en ejecutarse, pero en su lugar solo veo lo que está sucediendo dentro del ''método de inicio''.
Agradecería muchísimo si alguien pudiera explicarme 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()