Holen Sie sich Timer-Ticks in Python

Ich versuche nur, ein Stück Code zu schreiben. Der Pseudocode sieht aus wie:

start = get_ticks() do_long_code() print "It took " + (get_ticks() - start) + " seconds." 

Wie sieht das bei Python aus?

Genauer gesagt, wie bekomme ich die Anzahl der Zecken seit Mitternacht (oder aber Python organisiert das Timing)?

6 Solutions collect form web for “Holen Sie sich Timer-Ticks in Python”

Im Zeitmodul gibt es zwei Timing-Funktionen: time und clock . time gibt Ihnen "Wand" Zeit, wenn dies ist, was Sie sich interessieren.

Allerdings sagen die Python- Dokumente , dass die clock für das Benchmarking verwendet werden sollte. Beachten Sie, dass sich die clock in separaten Systemen unterschiedlich verhält:

  • Auf MS Windows, verwendet es die Win32-Funktion QueryPerformanceCounter (), mit "Auflösung in der Regel besser als eine Mikrosekunde". Es hat keine besondere Bedeutung, es ist nur eine Nummer (es beginnt zu zählen das erste Mal, wenn Sie die clock in Ihrem Prozess anrufen).
     # Ms Fenster
     T0 = ​​time.clock ()
     etwas tun()
     T = time.clock () - t0 # t ist Wand Sekunden verstrichen (Gleitpunkt)
  • On * nix, clock berichtet CPU-Zeit. Nun ist das anders und wahrscheinlich der Wert, den du willst, da dein Programm kaum der einzige Prozess ist, der die CPU-Zeit anfordert (auch wenn du keine anderen Prozesse hast, verwendet der Kernel jetzt die CPU-Zeit). Also, diese Zahl, die typischerweise kleiner ist als die Wandzeit (dh time.time () – t0), ist sinnvoller beim Benchmarking-Code:
     # Linux
     T0 = ​​time.clock ()
     etwas tun()
     T = time.clock () - t0 # t ist CPU Sekunden verstrichen (Gleitpunkt)

Abgesehen davon hat das Timeit- Modul die Timer Klasse, die das beste Benchmarking aus der verfügbaren Funktionalität nutzen soll.

¹ es sei denn, dass Threading in den Weg kommt …

² Python ≥3.3: es gibt time.perf_counter() und time.process_time() . perf_counter wird vom timeit Modul verwendet.

Was Sie brauchen, ist time() Funktion aus Zeitmodul:

 import time start = time.time() do_long_code() print "it took", time.time() - start, "seconds." 

Sie können Timeit- Modul für mehr Optionen verwenden.

Hier ist eine Lösung, die ich vor kurzem angefangen habe:

 class Timer: def __enter__(self): self.begin = now() def __exit__(self, type, value, traceback): print(format_delta(self.begin, now())) 

Du benutzt es so (Du brauchst wenigstens Python 2.5):

 with Timer(): do_long_code() 

Wenn Ihr Code beendet ist, druckt Timer automatisch die Laufzeit aus. Süß! Wenn ich versuche, schnell etwas im Python-Interpreter zu benennen, ist dies der einfachste Weg zu gehen.

Und hier ist eine Beispiel-Implementierung von 'now' und 'format_delta', aber fühlen Sie sich frei, Ihre bevorzugte Timing- und Formatierungsmethode zu verwenden.

 import datetime def now(): return datetime.datetime.now() # Prints one of the following formats*: # 1.58 days # 2.98 hours # 9.28 minutes # Not actually added yet, oops. # 5.60 seconds # 790 milliseconds # *Except I prefer abbreviated formats, so I print d,h,m,s, or ms. def format_delta(start,end): # Time in microseconds one_day = 86400000000 one_hour = 3600000000 one_second = 1000000 one_millisecond = 1000 delta = end - start build_time_us = delta.microseconds + delta.seconds * one_second + delta.days * one_day days = 0 while build_time_us > one_day: build_time_us -= one_day days += 1 if days > 0: time_str = "%.2fd" % ( days + build_time_us / float(one_day) ) else: hours = 0 while build_time_us > one_hour: build_time_us -= one_hour hours += 1 if hours > 0: time_str = "%.2fh" % ( hours + build_time_us / float(one_hour) ) else: seconds = 0 while build_time_us > one_second: build_time_us -= one_second seconds += 1 if seconds > 0: time_str = "%.2fs" % ( seconds + build_time_us / float(one_second) ) else: ms = 0 while build_time_us > one_millisecond: build_time_us -= one_millisecond ms += 1 time_str = "%.2fms" % ( ms + build_time_us / float(one_millisecond) ) return time_str 

Bitte lassen Sie mich wissen, wenn Sie eine bevorzugte Formatierungsmethode haben, oder wenn es einen einfacheren Weg gibt, all dies zu tun!

Das Zeitmodul in python gibt Ihnen Zugriff auf die Uhr () – Funktion, die die Zeit in Sekunden als Gleitkomma zurückgibt.

Verschiedene Systeme haben unterschiedliche Genauigkeit auf der Grundlage ihrer internen Uhr Setup (Zecken pro Sekunde), aber es ist in der Regel mindestens unter 20milliseconds, und in einigen Fällen besser als ein paar Mikrosekunden.

-Adam

 import datetime start = datetime.datetime.now() do_long_code() finish = datetime.datetime.now() delta = finish - start print delta.seconds 

Ab Mitternacht:

 import datetime midnight = datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) now = datetime.datetime.now() delta = now - midnight print delta.seconds 

Wenn du viele Aussagen hast, die du willst, kannst du so etwas benutzen:

 class Ticker: def __init__(self): self.t = clock() def __call__(self): dt = clock() - self.t self.t = clock() return 1000 * dt 

Dann könnte Ihr Code aussehen:

 tick = Ticker() # first command print('first took {}ms'.format(tick()) # second group of commands print('second took {}ms'.format(tick()) # third group of commands print('third took {}ms'.format(tick()) 

Auf diese Weise musst du nicht t = time() vor jedem Block und 1000 * (time() - t) nach ihm eingeben, während du immer noch die Kontrolle über die Formatierung beibehältest (obwohl du das auch im Ticket leicht machen kannst).

Es ist ein minimaler Gewinn, aber ich denke, es ist irgendwie bequem.

  • Kann nicht scheinen, pyqt Countdown Timer zu arbeiten
  • Wie man einen Hintergrund-Timer in Python läuft
  • Basic Tkinter Countdown Timer
  • Python 3 Zeitgesteuerter Eingang
  • Python: Akzeptiere Eingabe beim Warten [Duplizieren]
  • Wie lange dauert meine Python-Anwendung?
  • Python-Timer-Countdown
  • Python-Schleife für bestimmte Sekunden laufen
  • Wie planen Sie zeitgesteuerte Ereignisse in Flask?
  • Präzise Loop-Timing in Python
  • Python-Clock-Funktion auf FreeBSD
  • Python ist die beste Programmiersprache der Welt.