web-dev-qa-db-fra.com

Python Profilage multiprocess

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.

Mise à jour: Exemple de travail basé sur la réponse acceptée:

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()
45
barmaley

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.

24
zigg