it-swarm.com.de

Python Geschwindigkeitstest - Zeitunterschied - Millisekunden

Was ist der richtige Weg, um 2-mal in Python) zu vergleichen, um einen Codeabschnitt schneller zu testen? Ich habe versucht, die API-Dokumente zu lesen. Ich bin nicht sicher, ob ich das Timedelta-Ding verstehe.

Bisher habe ich diesen Code:

from datetime import datetime

tstart = datetime.now()
print t1

# code to speed test

tend = datetime.now()
print t2
# what am I missing?
# I'd like to print the time diff here
116
BuddyJoe

datetime.timedelta ist nur der Unterschied zwischen zwei Datumsangaben ... es ist also wie ein Zeitraum in Tagen/Sekunden/Mikrosekunden

>>> a = datetime.datetime.now()
>>> b = datetime.datetime.now()
>>> c = b - a

>>> c
datetime.timedelta(0, 4, 316543)
>>> c.days
0
>>> c.seconds
4
>>> c.microseconds
316543

Beachten Sie, dass c.microseconds Nur den Mikrosekundenanteil des Zeitdeltas zurückgibt! Verwenden Sie aus Zeitgründen immer c.total_seconds().

Mit datetime.timedelta können Sie alle möglichen Arten von Berechnungen durchführen, z.

>>> c / 10
datetime.timedelta(0, 0, 431654)

Es ist möglicherweise sinnvoller, die CPU-Zeit anstelle der Wanduhrzeit zu betrachten. Dies ist jedoch betriebssystemabhängig. Unter Unix-ähnlichen Systemen überprüfen Sie den Befehl 'time'.

171
NickZoic

Seit Python 2.7 gibt es die timedelta.total_seconds () -Methode. So erhalten Sie die verstrichenen Millisekunden:

>>> import datetime
>>> a = datetime.datetime.now()
>>> b = datetime.datetime.now()
>>> delta = b - a
>>> print delta
0:00:05.077263
>>> int(delta.total_seconds() * 1000) # milliseconds
5077
48
f.cipriani

Vielleicht möchten Sie stattdessen das timeit-Modul verwenden.

35
Darius Bacon

Sie könnten auch verwenden:

import time

start = time.clock()
do_something()
end = time.clock()
print "%.2gs" % (end-start)

Oder Sie könnten die Python-Profiler verwenden.

19
Zitrax

Ich weiß, dass es spät ist, aber ich mag es wirklich:

import time
start = time.time()

##### your timed code here ... #####

print "Process time: " + (time.time() - start)

time.time() gibt Ihnen Sekunden seit der Epoche. Da dies eine standardisierte Zeit in Sekunden ist, können Sie einfach die Startzeit von der Endzeit subtrahieren, um die Prozesszeit (in Sekunden) zu erhalten. time.clock() ist gut für das Benchmarking, aber ich fand es irgendwie nutzlos, wenn Sie wissen möchten, wie lange Ihr Prozess gedauert hat. Zum Beispiel ist es viel intuitiver zu sagen, dass "mein Prozess 10 Sekunden dauert", als zu sagen, dass "mein Prozess 10 Prozessortakteinheiten dauert".

>>> start = time.time(); sum([each**8.3 for each in range(1,100000)]) ; print (time.time() - start)
3.4001404476250935e+45
0.0637760162354
>>> start = time.clock(); sum([each**8.3 for each in range(1,100000)]) ; print (time.clock() - start)
3.4001404476250935e+45
0.05

Im obigen ersten Beispiel wird für time.clock () eine Zeit von 0,05 und für time.time () eine Zeit von 0,06377 angezeigt.

>>> start = time.clock(); time.sleep(1) ; print "process time: " + (time.clock() - start)
process time: 0.0
>>> start = time.time(); time.sleep(1) ; print "process time: " + (time.time() - start)
process time: 1.00111794472

Im zweiten Beispiel zeigt die Prozessorzeit irgendwie "0" an, obwohl der Prozess eine Sekunde geschlafen hat. time.time() zeigt etwas mehr als 1 Sekunde korrekt an.

14
mgoldwasser

Sie können den Unterschied einfach ausdrucken:

print tend - tstart
4
sth

Der folgende Code sollte die Zeitanzeige ...

from datetime import datetime

tstart = datetime.now()

# code to speed test

tend = datetime.now()
print tend - tstart
3
killy971

Hier ist eine benutzerdefinierte Funktion, die die Funktionen von Matlab/Octave tictoc imitiert.

Anwendungsbeispiel:

time_var = time_me(); # get a variable with the current timestamp

... run operation ...

time_me(time_var); # print the time difference (e.g. '5 seconds 821.12314 ms')

Funktion:

def time_me(*arg):
    if len(arg) != 0: 
        elapsedTime = time.time() - arg[0];
        #print(elapsedTime);
        hours = math.floor(elapsedTime / (60*60))
        elapsedTime = elapsedTime - hours * (60*60);
        minutes = math.floor(elapsedTime / 60)
        elapsedTime = elapsedTime - minutes * (60);
        seconds = math.floor(elapsedTime);
        elapsedTime = elapsedTime - seconds;
        ms = elapsedTime * 1000;
        if(hours != 0):
            print ("%d hours %d minutes %d seconds" % (hours, minutes, seconds)) 
        Elif(minutes != 0):
            print ("%d minutes %d seconds" % (minutes, seconds))
        else :
            print ("%d seconds %f ms" % (seconds, ms))
    else:
        #print ('does not exist. here you go.');
        return time.time()
2
Ulad Kasach

Ich bin kein Python Programmierer, aber Ich weiß, wie man Google benutzt und hier ist was ich gefunden habe: Sie benutzen den "-" Operator. Um Ihren Code zu vervollständigen:

from datetime import datetime

tstart = datetime.now()

# code to speed test

tend = datetime.now()
print tend - tstart

Außerdem können Sie mit der Funktion strftime () die Berechnung der Zeitspanne formatieren, um die Zeit zu rendern, was Sie jedoch glücklich macht.

2
Mike C.

time.time ()/datetime ist gut für den schnellen Gebrauch, aber nicht immer 100% genau. Aus diesem Grund verwende ich gerne eine der std lib Profiler (insbesondere hotshot), um herauszufinden, was was ist.

2
nilamo

Vielleicht möchten Sie in die Profil Module schauen. Sie können besser ablesen, wo sich Ihre Verlangsamungen befinden, und ein Großteil Ihrer Arbeit wird vollautomatisiert ablaufen.

2
Stefan Kendall

Sie können timeit wie folgt verwenden, um ein Skript mit dem Namen module.py zu testen

$ python -mtimeit -s 'import module'
0
Dhiraj Thakur