Wie können Sie sich vor einem schuppigen Bibliotheksaufruf schützen, der möglicherweise auf unbestimmte Zeit hängen bleibt?

Angenommen, Sie befinden sich in der unglücklichen Lage, von einer Bibliothek mit schlechtem Benehmen abhängig zu sein. Ihr Code muss FlakyClient.call () aufrufen, aber manchmal bleibt diese Funktion unannehmbar lange hängen.

Wie unten gezeigt, besteht eine Möglichkeit darin, den Anruf in ein eigenes @ zu verpackeProzes, und verwenden Sie den Timeout-Parameter imbeitrete -Methode, um die maximale Wartezeit auf dem FlakyClient festzulegen. Dies bietet einen guten Schutz, verhindert aber auch, dass der Hauptteil des Codes auf das Ergebnis des Aufrufs von FlakyClient.call () reagiert. Der einzige Weg, wie ich dieses andere Problem angehen kann (das Ergebnis in den Hauptteil des Codes zu bringen), ist die Verwendung einer umständlichen IPC-Technik.

Was ist eine saubere und pythonische Art, mit diesen beiden Problemen umzugehen? Ich möchte mich schützen, wenn der Aufruf der Bibliothek hängt, und das Ergebnis verwenden, wenn der Aufruf abgeschlossen ist.

Vielen Dank

from multiprocessing import Process
from flaky.library import FlakyClient


TIMEOUT_IN_SECS = 10

def make_flaky_call():
    result = FlakyClient.call()

proc = Process(target=make_flaky_call)
proc.start()
proc.join(TIMEOUT_IN_SECS)
if proc.is_alive():
    proc.terminate()
    raise Exception("Timeout during call to FlakyClient.call().")

Antworten auf die Frage(4)

Ihre Antwort auf die Frage