Я пытаюсь делать последовательные вызовы некоторого кода профилировщика, однако при втором вызове функции время обновления файла профиля изменяется, но фактическая статистика профилировщика остается прежней. Это не тот код, который я запускаю, но он настолько упрощен, что пример, который я могу придумать, демонстрирует то же поведение.
При запуске, при первом нажатии Ctrl + C он показывает статистику, во второй раз то же самое, но не полностью обновляется, как ожидалось, только время, и программа в третий раз фактически закрывается. Если вы пытаетесь, в идеале подождите несколько секунд между нажатиями Ctrl + C.
Добавление profiler.enable () после 8-й строки дает полное обновление между вызовами, однако добавляет много дополнительных данных профилировщика для вещей, которые я не хочу профилировать.
Какие-нибудь предложения для счастливой среды, где я получаю полные обновления, но без лишнего пуха?
import signal, sys, time, cProfile, pstats
call = 0
def sigint_handler(signal, frame):
global call
if call < 2:
profiler.dump_stats("profile.prof")
stats = pstats.Stats("profile.prof")
stats.strip_dirs().sort_stats('cumulative').print_stats()
call += 1
else:
sys.exit()
def wait():
time.sleep(1)
def main_io_loop():
signal.signal(signal.SIGINT, sigint_handler)
while 1:
wait()
profiler = cProfile.Profile()
profiler.runctx("main_io_loop()", globals(), locals())