Tags: Python

Python: jak uzyskać czas wykonania programu?

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

Tekst komentarza

Wszystkie pola są obowiązkowe