Aby zmierzyć czas wykonania programu w Pythonie, można skorzystać z różnych metod w zależności od potrzeb i kontekstu. Oto kilka popularnych sposobów:
Moduł `time`
Najprostszym sposobem jest użycie funkcji `time()` z modułu `time`, która zwraca aktualny czas w sekundach od tzw. "Epoche" (zazwyczaj od 1 stycznia 1970 roku). Przykład użycia:
import time
start_time = time.time() # Zapisz czas na początku
# Kod, którego czas wykonania chcesz zmierzyć
# ...
end_time = time.time() # Zapisz czas po wykonaniu kodu
execution_time = end_time - start_time # Oblicz czas wykonania
print(f"Czas wykonania programu: {execution_time} sekund")
Moduł `timeit`
Do precyzyjnych pomiarów, zwłaszcza dla krótkich fragmentów kodu, zaleca się użycie modułu `timeit`. Jest on zaprojektowany tak, aby unikać pewnych typowych pułapek związanych z pomiarom czasu, takich jak wpływ procesów działających w tle. Przykład:
import timeit
# Kod do zmierzenia w formie łańcucha znaków
code_to_test = """
a = [1, 2, 3, 4, 5]
b = []
for item in a:
b.append(item**2)
"""
# Wykonaj timeit.timeit z tym kodem
execution_time = timeit.timeit(stmt=code_to_test, number=100000)
print(f"Czas wykonania programu: {execution_time} sekund")
Dekorator `timeit`
Można również stworzyć dekorator, który będzie używać `timeit`, aby automatycznie zmierzyć czas wykonania funkcji przy każdym jej wywołaniu.
import timeit
def time_function(func):
def wrapper(*args, **kwargs):
start_time = timeit.default_timer()
result = func(*args, **kwargs)
end_time = timeit.default_timer()
print(f"Funkcja {func.__name__!r} wykonana w {end_time - start_time:.4f} sekund")
return result
return wrapper
@time_function
def example_function():
# Kod do wykonania
# ...
pass
Kontekstowy menedżer `time`
Można również zaimplementować własny menedżer kontekstu za pomocą modułu `time`, który będzie mierzył czas wykonania bloku kodu:
import time
class Timer:
def __enter__(self):
self.start = time.time()
return self
def __exit__(self, *args):
self.end = time.time()
self.interval = self.end - self.start
print(f"Czas wykonania bloku kodu: {self.interval:.4f} sekund")
with Timer():
# Kod do zmierzenia
# ...
pass
Moduł `datetime`
Można również użyć modułu `datetime` do zmierzenia czasu, ale jest on zwykle używany do pracy z datami, a nie do precyzyjnego pomiaru czasu wykonania.
Wybór metody zależy od konkretnych wymagań: dla prostego pomiaru czasu `time` jest wystarczający i łatwy w użyciu, natomiast `timeit` jest lepszym wyborem dla dokładniejszych pomiarów, szczególnie w przypadku benchmarkingu kodu. Dekorator i menedżer kontekstu to wygodne opcje, które ułatwiają wielokrotne użycie kodu pomiarowego.
Komentarz