Seite 1 von 1
Aufruf einer Funktion abbrechen
Verfasst: Mittwoch 22. Februar 2017, 15:46
von niklas1993
Hallo Leute,
Ich habe leider bis jetzt keine Lösung für mein Problem gefunden.
Ich habe folgende try and except Konstallation.
Code: Alles auswählen
try:
variable = Methodenaufruf
except:
print "Methodenaufruf dauert zu lange"
Mein Methodenaufruf dauert nur leider manchmal ewig, bis er ein Ergebniss ausgibt. Wie kann ich dies abfangen?
Sprich den Aufruf nach beispielsweise 10 Sekunden abbrechen.
Da der Aufruf nur sehr lange braucht, aber nicht abbricht, funktioniert meine except Bedingung nicht. Soweit habe ich das Verstanden, aber was kann ich stattdessen machen?
Ich hoffe man versteht was ich meine

Re: Aufruf einer Funktion abbrechen
Verfasst: Mittwoch 22. Februar 2017, 15:53
von snafu
Kommt sehr auf den Zusammenhang an. Was genau tut die Methode? Hast du sie selbst erstellt? Zeige, wenn möglich, mal den Code der Methode.
Re: Aufruf einer Funktion abbrechen
Verfasst: Mittwoch 22. Februar 2017, 16:04
von niklas1993
Wollte eigentlich nicht soweit ausholen, aber dann mache ich das jetzt doch mal.
Ich habe einen Raspberry, der kontroliert ob ein Webinterface (vom Receiver) erreichbar ist. Ist dieses erreichbar, so soll er nichts machen. Ist es nicht erreichbar, so soll er den Receiver neustarten (per Funksteckdose).
Dazu habe ich folgenden Code:
Code: Alles auswählen
import mechanize
try:
br = mechanize.Browser()
br.open("http://192.168.178.34/index_s.html")
except:
#Neustart
Leider läuft nun der "open-Aufruf" ewig, ohne Ergebniss, sodass auch die except Bedingung nichts bringt.
Was kann ich stattdessen nutzen?
Re: Aufruf einer Funktion abbrechen
Verfasst: Mittwoch 22. Februar 2017, 16:09
von Sirius3
@niklas1993: für die Erreichbarkeit reicht ja ein einfacher PING mit Timeout. Oder falls es den Webserver auch testen soll, ein Socket auf Port 80. mechanize ist da jedenfalls der falsche Weg.
Re: Aufruf einer Funktion abbrechen
Verfasst: Mittwoch 22. Februar 2017, 16:19
von BlackJack
@niklas1993: Sockets kennen Zeitüberschreitungen. Ob und wie man die Zeit mit/bei `mechanize` setzt, kann ich Dir jetzt nicht sagen, aber wie schon gesagt wurde, ist das auch ein bisschen übertrieben. Dafür reicht `urllib2.urlopen()` und das hat ein `timeout`-Argument.
Re: Aufruf einer Funktion abbrechen
Verfasst: Mittwoch 22. Februar 2017, 16:42
von niklas1993
Danke erstmal für die schnellen Antworten.
Ein einfacher ping reicht leider seltsamer weise nicht aus. Ich kann den Receiver anpingen, aber das Webinterface ist nicht erreichbar.
Mit `urllib2.urlopen()` werde ich mal probieren und mich dann wieder melden.