Ответ 1
Профилирование процесса запуска, поэтому вы видите только то, что происходит в p.start()
, как вы говорите, и p.start()
возвращается после запуска подпроцесса. Вам нужно профайл внутри метода worker
, который вызывается в подпроцессах.
Я пытаюсь выяснить, как профилировать простой многопроцессорный питон 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)
Я запускаю 5 процессов, поэтому cProfile генерирует 5 разных файлов. Внутри каждого я хочу видеть, что мой рабочий "рабочий" занимает примерно 3 секунды, но вместо этого я вижу только то, что происходит внутри "start'method".
Я был бы очень признателен, если бы кто-нибудь мог мне это объяснить.
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()
Профилирование процесса запуска, поэтому вы видите только то, что происходит в p.start()
, как вы говорите, и p.start()
возвращается после запуска подпроцесса. Вам нужно профайл внутри метода worker
, который вызывается в подпроцессах.