381 Stimmen

Messung der verstrichenen Zeit mit dem Modul Time

Ist es möglich, mit dem Time-Modul in Python die verstrichene Zeit zu messen? Wenn ja, wie kann ich das tun?

Ich muss dies tun, so dass, wenn der Cursor in einem Widget für eine bestimmte Dauer ein Ereignis geschieht.

7voto

Tora Punkte 922

Für einen längeren Zeitraum.

import time
start_time = time.time()
...
e = int(time.time() - start_time)
print('{:02d}:{:02d}:{:02d}'.format(e // 3600, (e % 3600 // 60), e % 60))

würde drucken

00:03:15

wenn mehr als 24 Stunden

25:33:57

Das ist inspiriert von der Antwort von Rutger Hofste. Vielen Dank, Rutger!

5voto

Nurul Akter Towhid Punkte 2678

Sie müssen time importieren und dann die Methode time.time() verwenden, um die aktuelle Zeit zu erfahren.

import time

start_time=time.time() #taking current time as starting time

#here your code

elapsed_time=time.time()-start_time #again taking current time - starting time

5voto

T.M. Punkte 511

Eine weitere gute Möglichkeit, die Zeit zu bestimmen, ist die Verwendung der mit python Struktur.

mit Struktur ruft automatisch __eingehen__ y __Ausgang__ Methoden, was genau das ist, was wir brauchen, um die Dinge zu beschleunigen.

Erstellen wir eine Zeitschaltuhr Klasse.

from time import time

class Timer():
    def __init__(self, message):
        self.message = message
    def __enter__(self):
        self.start = time()
        return None  # could return anything, to be used like this: with Timer("Message") as value:
    def __exit__(self, type, value, traceback):
        elapsed_time = (time() - self.start) * 1000
        print(self.message.format(elapsed_time))

Dann kann man die Klasse Timer wie folgt verwenden:

with Timer("Elapsed time to compute some prime numbers: {}ms"):
    primes = []
    for x in range(2, 500):
        if not any(x % p == 0 for p in primes):
            primes.append(x)
    print("Primes: {}".format(primes))

Das Ergebnis ist das folgende:

Primzahlen: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499]

Verstrichene Zeit zum Berechnen einiger Primzahlen: 5.01704216003418ms

2voto

Mohammad Punkte 61

Die Antwort von Vadim Shender ist großartig. Sie können auch einen einfacheren Dekorator wie unten verwenden:

import datetime
def calc_timing(original_function):                            
    def new_function(*args,**kwargs):                        
        start = datetime.datetime.now()                     
        x = original_function(*args,**kwargs)                
        elapsed = datetime.datetime.now()                      
        print("Elapsed Time = {0}".format(elapsed-start))     
        return x                                             
    return new_function()  

@calc_timing
def a_func(*variables):
    print("do something big!")

0voto

Steve Punkte 1136

Hier ist eine Aktualisierung des cleveren Codes von Vadim Shender mit tabellarischer Ausgabe:

import collections
import time
from functools import wraps

PROF_DATA = collections.defaultdict(list)

def profile(fn):
    @wraps(fn)
    def with_profiling(*args, **kwargs):
        start_time = time.time()
        ret = fn(*args, **kwargs)
        elapsed_time = time.time() - start_time
        PROF_DATA[fn.__name__].append(elapsed_time)
        return ret
    return with_profiling

Metrics = collections.namedtuple("Metrics", "sum_time num_calls min_time max_time avg_time fname")

def print_profile_data():
    results = []
    for fname, elapsed_times in PROF_DATA.items():
        num_calls = len(elapsed_times)
        min_time = min(elapsed_times)
        max_time = max(elapsed_times)
        sum_time = sum(elapsed_times)
        avg_time = sum_time / num_calls
        metrics = Metrics(sum_time, num_calls, min_time, max_time, avg_time, fname)
        results.append(metrics)
    total_time = sum([m.sum_time for m in results])
    print("\t".join(["Percent", "Sum", "Calls", "Min", "Max", "Mean", "Function"]))
    for m in sorted(results, reverse=True):
        print("%.1f\t%.3f\t%d\t%.3f\t%.3f\t%.3f\t%s" % (100 * m.sum_time / total_time, m.sum_time, m.num_calls, m.min_time, m.max_time, m.avg_time, m.fname))
    print("%.3f Total Time" % total_time)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X