Es hat eine Weile gedauert, Rolands Lösung zu implementieren, weil ich Python-Code als Strings umgehen musste, also dachte ich, ich würde ein funktionierendes Beispiel teilen.
Dieses Skript gibt ein externes Programm im Arbeitsverzeichnis aus und leitet seine Standardausgabe und seinen Standardfehler in Dateien um.
from timeit import timeit
reps = 500
stdout = open("add_numbers_outputs.log", 'w')
stderr = open("add_numbers_errors.log", 'w')
external_command = "./add_numbers"
parameter = str(1000000) # one million
call_arguments = """[
'%s',
'%s'], # pass additional parameters by adding elements to this list
stdout=stdout,
stderr=stderr
""" % (external_command, parameter)
print "Timing external command "+external_command+" with parameter "+parameter
time_taken = timeit(stmt = "subprocess.call(%s)" % call_arguments,
setup = """import subprocess;
stdout = open("add_numbers_outputs.log", 'w');
stderr = open("add_numbers_errors.log", 'w')
""",
number = reps)/reps
print "Average time taken for %s repetitions: %f seconds" % (reps, time_taken)
danke! das ist ziemlich informativ! :) – Frost
Diese Antwort sieht gut aus für Timing-Python-Code, aber wenn wir einen Subprozess ausführen, ist dies möglicherweise nicht korrekt, da Popen.wait() eine Busy-Schleife verwendet. [https://docs.python.org/dev/library/subprocess.html#subprocess.Popen.wait] – ggg
@ggg Nicht sicher, ob das wirklich ein Problem ist: Popen.wait() sollte in dem aktuellen Prozess ausgeführt werden. Daher sollte die Ressourcennutzung von untergeordneten Prozessen nicht beeinflusst werden. – Steohan