Вслед за этим Контекстным менеджером 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 с помощью своих обработчиков очистки будет делать что-то, связанное со сборкой памяти и мусора, что называется действиями по очистке. Например, выполнение предложений finally
операторов try
, очистка буферов ввода-вывода, уничтожение каждого отдельного объекта, закрытие потоков и дочерних процессов, освобождение памяти, выделенной библиотеками, и т. д.
Во-вторых, вы можете использовать os._exit()
, чтобы немедленно выйти из Python, не выполняя никакой очистки самим Python. Это похоже на команду kill
в Linux или команду taskkill
в Windows. Это не рекомендуется, так как это
грубый и агрессивный.
В-третьих, если вы действительно хотите запечатлеть все время, я предлагаю отслеживать ход выполнения кода Python с помощью другого прогресса.