Ich habe ein Python-Programm, das mehrere (etwa 5-6) lange Abfrageanforderungen parallel sendet, wobei für jede Abfrage über Anforderungspakete unterschiedliche Threads verwendet werden. Und mir ist aufgefallen, dass einige meiner Themen manchmal einfach erstarren. Wenn dies geschieht, empfängt der Server, an den ich die Anfrage sende, die Anfrage nicht. Außerdem habe ich eine Zeitüberschreitung für die Anfrage festgelegt und es funktioniert nicht.Python-Anfragen frieren manchmal ein
try:
print("This line prints")
response = requests.head(poll_request_url, timeout=180)
print("This line does not print when freeze occurs")
except ReadTimeout:
print("Request exception.")
except RequestException as e:
print("Request exception.")
except Exception:
print("Unknown exception.")
print("This line does not print either when freeze occurs.")
Ich mache das auf Raspberry Pi 2 Hardware mit Raspbian OS.
Ich habe das gleiche Programm ohne ein Problem, wenn ich Python 2.7 verwendet. Kürzlich bin ich zu Python 3.5 gewechselt. Ich habe beide Request-Versionen mit 2.8.1 und 2.9.1 getestet.
Dieses Problem tritt nicht sehr häufig auf, aber es passiert 2-3 mal pro Tag auf verschiedenen Threads.
Was könnte das Problem sein? Wie kann ich das debuggen?
Edit: Das Problem wird durch Aktualisieren des Linux-Kernels gelöst.
Ich fange alle Ausnahmen einschließlich Timeout, und wenn Timeout passiert, fängt es die Ausnahme erfolgreich ab. Wenn die Zeitüberschreitung nicht auftritt und ein Einfrieren stattfindet, wird diese Zeile niemals ausgeführt und es wird keine Ausnahme ausgelöst. –
Ich habe dem Code einen weiteren Kontext hinzugefügt, um die Ausnahmebehandlung widerzuspiegeln. –
Dies muss während des "connect" -Schritts fehlschlagen - da Sie sagen, dass Sie niemals eine Anfrage auf dem Server erhalten. –