Должен ли таймер захватывать все время создания списка?

Вслед за этим Контекстным менеджером Python, измеряющим время , я попробовал сам.

from time import perf_counter


class catchtime:
    def __enter__(self):
        self.start = perf_counter()
        return self

    def __exit__(self, type, value, traceback):
        self.time = perf_counter() - self.start
        self.readout = f"Time: {self.time:.3f} seconds"
        print(self.readout)


with catchtime() as timer:
    a = [1] * 1000000000
    print(1)

print(timer.readout)

Дело в том, что даже после завершения отсчета времени программа Python прекращает выполнение только через несколько секунд. Я читал, что это связано с памятью и сборкой мусора. Может ли кто-нибудь объяснить мне это и должен ли таймер действительно захватывать все время?

🤔 А знаете ли вы, что...
С Python можно создавать роботов и автоматизированные системы с использованием библиотеки Raspberry Pi.


50
1

Ответ:

Решено

Во-первых, как вы сказали, Python с помощью своих обработчиков очистки будет делать что-то, связанное со сборкой памяти и мусора, что называется действиями по очистке. Например, выполнение предложений finally операторов try, очистка буферов ввода-вывода, уничтожение каждого отдельного объекта, закрытие потоков и дочерних процессов, освобождение памяти, выделенной библиотеками, и т. д.

Во-вторых, вы можете использовать os._exit(), чтобы немедленно выйти из Python, не выполняя никакой очистки самим Python. Это похоже на команду kill в Linux или команду taskkill в Windows. Это не рекомендуется, так как это грубый и агрессивный.

В-третьих, если вы действительно хотите запечатлеть все время, я предлагаю отслеживать ход выполнения кода Python с помощью другого прогресса.


Интересные вопросы для изучения

Почему результаты AES-256-CBC в PHP и Python различаются при использовании одних и тех же ключей и данных?С использованием attrs pre-commit ошибка mypy: неожиданный аргумент ключевого словаПолучение группового ключа при использовании группы путем применения (списка)Почему pytorch tensor.item() дает неточный вывод для любого ввода действительного числа, но дает точный вывод для числа, которое заканчивается на .0 или .5?Рассчитать количество точек заданного радиуса по координатам X и YПочему некоторые функции регулярных выражений возвращают объект соответствия, а некоторые нет?Группируйте элементы в фрейме данных и отображайте их в хронологическом порядкеОперации Pandas между типами с плавающей запятой и NaNИспользуйте спецификатор формата для преобразования столбца float/int в фрейме данных Polars в строкуКак ВСТАВИТЬ в таблицу с помощью AUTO_INCREMENT?