Я исследовал другие статьи SOF о том, как это сделать, и долгое время возился с кодом, никуда не деться. Я также смотрел видео YouTube о профилировании и пробовал примеры в документации cProfile, и они, похоже, не охватывают итерации. Кажется, никто не обсуждает использование cProfile
для файлов в итерируемом объекте.
Итак, сейчас у меня есть то, что все еще не работает. Что не работает? Ну, cProfile.py
использует рекурсию и не может перейти к следующему файлу для повторения.
Я пробовал рекурсивную функцию цикла, для цикла, и это не имеет значения. Как только __iter__
и __next__
, кажется, подобраны cProfile.py
, cProfile.py
, кажется, попадает в бесконечный цикл. Я должен использовать 32-битный Python, поэтому этот код будет запускаться из 1 или 2 файлов в списке, снова и снова, пока Python не выдаст MemoryError
.
Я хочу запустить некоторый код для создания списка файлов, выполнить итерацию по списку и запустить cProfile.run()
_or или вызывать для них командную функцию Python.
Мне нужно изменить предел рекурсии, чтобы в моем коде не было ошибки рекурсии, но затем он просто работает до бесконечного большего предела рекурсии. Я не хочу делать это вообще. Фактически, он будет обрабатывать 2 файла в списке одновременно и никогда не будет двигаться дальше. Я попытался добавить аргументы командной строки, которая все еще не работает, потому что проблема, кажется, исходит из cProfile.py
и как я его использую.
from subprocess import call
from glob import glob
from sys import argv, setrecursionlimit
setrecursionlimit(10000)
files = glob('**/*.py', recursive=True)
def run_cProfile(file):
call(['python', '-m', 'cProfile', '-s', 'ncalls', file])
for file in files:
if file == argv[0]:
continue
print('Processing file: {}'.format(file))
run_cProfile(file)
Вывод выводит то, что вы ожидаете от cProfile
, но он просто делает это с тем же файлом в списке, пока я не получу MemoryError
или RecursionError
.
Общая картина заключается в том, что я пишу программу командной строки, которая будет запускать различные внешние профилировщики для файлов, передаваемых в качестве аргументов командной строки, анализировать результаты и сохранять данные в плоский файл для анализа. Я не хочу изменять какой-либо код для этих профилировщиков для запуска и создания отчета. Это может быть отдельный проект.
Ваша помощь будет принята с благодарностью.
Спасибо!