J'ai du mal à comprendre comment profiler un simple multiprocess python script
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)
Je commence 5 processus et donc CProfile génère 5 fichiers différents. À l'intérieur de chacun, je veux voir que ma méthode 'travailleur' prend environ 3 secondes à courir, mais je ne vois que ce qui se passe à l'intérieur de 'Start'Method.
J'apprécierais grandement si quelqu'un pourrait me l'expliquer.
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()
Vous profilez le démarrage du processus, c'est pourquoi vous ne voyez que ce qui se passe dans p.start()
Comme vous dites-et p.start()
retourne une fois que le sous-processus est lancé. Vous devez profiler à l'intérieur de la méthode worker
, qui sera appelée dans les sous-processus.