Вопрос по python, multiprocessing, cprofile – Многопроцессное профилирование Python
Я изо всех сил пытаюсь понять, как профилировать простой многопроцессорный скрипт на Python
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)
Я запускаю 5 процессов и, следовательно, cProfile создает 5 разных файлов. Внутри каждого я хочу видеть, что мой метод «работник» для запуска требуется приблизительно 3 секунды, но вместо этого я вижу только то, что происходит внутри метода "start".
Буду очень признателен, если кто-нибудь сможет мне это объяснить.
Update: Working example based on accepted answer: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()
1
ответ
поэтому вы только видите, что происходит вp.start()
как вы говорите & # x2014; иp.start()
возвращается после запуска подпроцесса. Вам нужно профилировать внутриworker
метод, который будет вызван в подпроцессах.
Вот Это Да! Я чувствую себя глупо :) это было так просто. Большое спасибо! И спасибо за быстрый ответ.
barmaley