Ich bin auf der Suche nach einer Möglichkeit, die CPU-Zeit des Teils meines Python-Programms zu messen. Ich schaute mich um und es scheint, dass alle Zeitmessfunktionen, die ich finden konnte, die Wanduhrzeit unter Windows messen. Gibt es eine Möglichkeit, die CPU-Zeit unter Windows für Python zu messen? Vielen Dank.Python CPU-Zeit auf Windows
Antwort
time.process_time()
https://www.python.org/dev/peps/pep-0418/
Die neue time.process_time() Funktion fungiert als tragbare Zähler dass CPU-Zeit immer misst (Zeit während des Schlafes verstrichen ohne) und hat die beste verfügbare Auflösung.
Früher für jedermann beantworten wollen timeit() verwenden, um Durchschnitt:
Ich schrieb dieses, während vor kurzem Python zu lernen. Es ist eine timeit.Timer Klasse, die timeit() über Funktionen für die Mittelung iteriert; in meiner Forschung schien das Timing leicht zu durcheinander zu sein und zeit() scheinbar knifflig zu sein, um funktionieren zu können (obwohl es einfacher war, an der Kommandozeile zu arbeiten). Das funktioniert.
Beachten Sie auch diese Antwort schlägt die beste Wette time.process_time() für Python ist 3.3+ und erinnert daran, dass .default_timer() Wand Zeit:
https://stackoverflow.com/a/15176730/3981745
""" Sum a range with timing/comparisons.
- Manually summing from low..high : a beginner's loop with no algorithms experience
- Python's sum() - does the same thing for an "efficient" programmer
- Fast sum - a programmer with math focus
- Timing calls (easy to do wrong)
This is a trivial formula to demonstrate what a little math can do; for games this type of optimization is critical. It could probably be even more optimized.
"""
def slow_way(lo, hi):
s=0
for i in range(lo, hi+1):
s+=i
return s
def fast_way(lo, hi):
lph=lo+hi # lo plus hi
hmlpo=hi-lo+1 # hi minus lo plus one
pairs=hmlpo//2
#print("-", lo,hi,pairs, pairs*lph, (lo+pairs)*(hmlpo%2))
return (pairs*lph + (lo+pairs)*(hmlpo%2))
import timeit
# 'builtin' hack doesn't seem to work
#import __builtin__
#__builtin__.__dict__.update(locals())
ranges=[]
ranges.append((1,10,))
ranges.append((2,10,))
ranges.append((3,10,))
ranges.append((4,10,))
ranges.append((5,10,))
ranges.append((32,10032,))
print("Calculation check...")
print("slow : sum : fast : should all match")
for tupl in ranges:
l=tupl[0]; h=tupl[1]
print("{} : {} : {}".format(slow_way(l,h), sum(range(l, h+1)), fast_way(l,h)))
iters=100000
print("-"*20 +"\nTime compare ({} iterations) : lower is better".format(iters))
slow=timeit.Timer("slow_way(1,101)", "from __main__ import slow_way")
print("slow: {0:.6f}".format(slow.timeit(number=iters)))
# functions include last number, range should be +1
s=timeit.Timer("sum(range(1,102))", "")
print(" sum: {0:.6f}".format(s.timeit(number=iters)))
fast=timeit.Timer("fast_way(1,101)", "from __main__ import fast_way")
print(" fast: {0:.6f}".format(fast.timeit(number=iters)))
Ausgabe
Calculation check...
slow : sum : fast : should all match
55 : 55 : 55
54 : 54 : 54
52 : 52 : 52
49 : 49 : 49
45 : 45 : 45
50325032 : 50325032 : 50325032
--------------------
Time compare (100000 iterations) : lower is better
slow: 4.719885
sum: 0.963886
fast: 0.343524
time.clock()
Unter Windows können Sie time.clock()
verwenden, die im Grunde QueryPerformanceCounter()
von der Windows-API verwendet.
Queryperformancecounter():
Ermittelt den aktuellen Wert des Leistungsindikatoren, der eine hohe Auflösung (< 1 us) Zeitstempel ist, der für die Zeitintervallmessungen verwendet werden kann.
Hier ist eine detaillierte Erklärung für time.clock aus dem Python docs:
auf Unix, kehren die aktuelle Prozessorzeit als eine Gleitkommazahl in Sekunden ausgedrückt. Die Genauigkeit und eigentlich die Definition der Bedeutung von "Prozessorzeit" hängt von der gleichnamigen C-Funktion ab, aber in jedem Fall ist dies die Funktion, die zum Benchmarking von Python- oder Timing-Algorithmen verwendet wird. Unter Windows gibt diese Funktion seit dem ersten Aufruf dieser Funktion verstrichene Wanduhr-Sekunden als Fließkommazahl zurück, basierend auf der Win32-Funktion QueryPerformanceCounter(). Die Auflösung ist typischerweise besser als eine Mikrosekunde.
timeit
Wenn Sie etwas noch genauer braucht, ist da timeit
. Diese Antwort erklärt die Vorteile von timeit
: https://stackoverflow.com/a/17579466/2394967
Hier ist das Problem. Ich benutze gerade Zeit mit diesen Funktionen. start_time = timeit.default_timer() abgelaufen = (timeit.default_timer() - start_time). Aber wenn ich dazwischen pausiere, zählt es immer noch die Pausenzeit. Ist das nicht in einen Wanduhr-Timer anstelle von CPU-Timer? – Saik
Ja. default_timer ist die Wanduhr (in der Dokumentation). –
aber time.clock() gibt mir auch eine Wanduhr und es scheint, als würde es CPU-Zeit nur geben, wenn es unter Unix benutzt wird. Wie bekomme ich es, um mir CPU-Zeit unter Windows zu geben :) – Saik
- 1. Python-Benachrichtigung auf Windows-Plattform
- 2. python multish Pool auf Windows
- 3. Python 3 auf Windows herunterladen
- 4. Python + webkit + gtk auf Windows
- 5. installieren Python-kerberos auf Windows
- 6. Python-Interpreter-Version auf Windows
- 7. Zugriff auf Windows on_screen Tastaturzubehör über Python
- 8. Python auf Windows-Zeitzonenänderungen reagieren lassen
- 9. Installation von libxml2 auf Python 2.7 Windows
- 10. Parse Windows-Kommandozeile über Python auf Linux
- 11. SciPy Installation auf Windows für Python 3.5
- 12. Gitlab CI nicht erkennt Python auf Windows
- 13. Python 27 Tkiner auf Windows reagiert nicht
- 14. Python-Druck mit os.startfile auf Windows
- 15. Python: gettext nicht geladen Übersetzungen auf Windows
- 16. Python lesen Datei nicht blockiert auf Windows
- 17. pip installieren MySQL-Python auf Windows
- 18. gtk 2.7 Paket für Python auf Windows
- 19. Python Behave + Nicht-ASCII-Schritte auf Windows
- 20. Python Textfarbe funktioniert nicht auf Windows
- 21. Versuchen, xgboost in Python auf Windows
- 22. Python App auf Windows Portierung nach Linux
- 23. Tensorflow Installation auf Python 3.4, Windows
- 24. Python öffnen Windows Explorer
- 25. Python-Anwendung für Windows
- 26. Windows-Fehler und Python
- 27. Python 3.0 Windows/COM
- 28. Windows Python zuverlässig erkennen
- 29. Machen Sie Python Zugriff auf MS Access schneller auf Windows
- 30. Python struct unter Windows
Ich habe nichts gegen Ihre Änderungen ... oder ich kann die äußeren selbst entfernen, wenn die Leute denken, dass es besser ist. –