Нет, поскольку документы говорят: «Функция трассировки вызывается (с событием, установленным на« вызов ») всякий раз, когда вводится новая локальная область» - если вы никогда не вводите локальную область (и выполняется только в глобальной области), функция трассировки никогда не будет вызываться. Обратите внимание, что settrace в любом случае слишком инвазивен с целью определения времени «сколько времени занимает выполнение скрипта», так как это изменит то, что он измеряет слишком много; если то, что вы говорите, на самом деле то, что вы хотите, просто возьмите время в начале выполнения и зарегистрируйте в atexit
функцию, которая снова получает время и печатает разницу. Если то, что вы хотите, отличается, то есть профилирование , см. cProfile .
Также обратите внимание, что пример кода, который вы даете, не может ничего сделать полезного (хотя я редактировал его, чтобы исправить ошибку отступа): сначала он зацикливается, затем он определяет функцию, наконец, она вызывает settrace ... затем сразу заканчивается, потому что после этого больше нет кода! Если вы хотите, чтобы что-то произошло за до запуска этого цикла, и вы хотите, чтобы все было на верхнем уровне модуля (плохая идея, но, что угодно), вы должны поместить "что-нибудь" в лексическом порядке перед цикл, а не после ...; -)