Ich möchte einen Timer erstellen, so dass eine bestimmte Codezeile nur 60 Sekunden verarbeitet werden muss.Nur eine bestimmte Anzahl von Sekunden für eine Zeile von Python
def foo():
for i in xrange(10):
output = action(arg1, arg2)
print i
Wenn diese Aktion mehr als 60 Sekunden dauert, dann nicht gedruckt i, sondern einfach weiter zu nächsten. Wie kann ich das machen?
Aktion ist keine Schleife, daher funktioniert der Timer nicht. Ich habe auch versucht Signal, aber das funktioniert auch nicht, weil ich diese verschachtelte Innenschleifen habe und ich bekomme einen Fehler, der sagt: ValueError: Signal funktioniert nur im Haupt-Thread // Werkzeug Debugger.
Hier ist, was ich mit Signalen versucht haben, so weit und die Fehler, die ich erhalten:
fileName.py
class TimeoutException(Exception):
pass
def timeout_handler(signum, frame):
raise TimeoutException
signal.signal(signal.SIGALRM, timeout_handler)
def foo():
signal.alarm(60)
try:
output = foo2(arg1, arg2)
except TimeoutException:
continue
else:
# Reset the alarm
signal.alarm(0)
ich dies tun und stattdessen die Ausnahme zu heben, die nur dann passieren sollte schließlich weiter Mit meiner Operation bekomme ich das und das Skript endet.
Linie X in timeout_handler
Erhöhung Timeout
fileName.TimeoutException
Es ist nicht von Ihrer ursprünglichen Problemstellung scheint, die Sie benötigen, eine Ausnahme zu erhöhen, wenn die Funktion Aufruf zum Handeln dauerte mehr als 60 Sekunden. Ich habe nur verglichen, wie die Aussage mit einem Gleichheitsunterschied ausging. Wenn es länger als 60 Sekunden war, wird die Schleifenvariable nicht gedruckt. es macht einfach weiter, was es getan hat. – Joe
hey Joe, in dem Code, den Sie zur Verfügung gestellt haben, ist output = action (arg1, arg2) etwas, das nur 1 Sekunde oder bis zu 2 Minuten dauern könnte. Wenn es länger als 60 Sekunden dauert, möchte ich diese Aktion beenden und mit der nächsten Aktion fortfahren. – user3781365
Entschuldigung bedeutete 2 Stunden * – user3781365