Timeout eine Python-Funktion in Windows

8

Ich versuche, Timeout für eine bestimmte Funktion zu implementieren. Ich habe viele der Fragen in SE geprüft und konnte keine Lösung finden, die zu meinem Problem passt, denn

  1. Ich führe Python in Windows
  2. aus
  3. Timeout wird auf eine Python-Funktion angewendet, auf die ich keine Kontrolle habe, d. h. sie ist in einem bereits entworfenen Modul definiert.
  4. Die Python-Funktion ist kein Subprozess

Ich habe ein bereits entwickeltes benutzerdefiniertes Modul (zB MyModule) für bestimmte Aufgaben entwickelt, und darin sind Funktionen definiert. Eine der Funktionen (zB MyFunc) neigt aufgrund externer Faktoren dazu, für immer zu laufen, und ich möchte einfach nicht, dass das Python-Skript hängt.

Ich plane, eine Zeitüberschreitungsfunktion hinzuzufügen, wie unten unter Pseudocode

angegeben %Vor%

Aber ich bin nicht sicher, welches Modul verwendet werden kann, um dies auf Python zu erreichen. Beachten Sie, dass ich ein Neuling bin und alle Skripte, die ich geschrieben habe, direkt auf SE Answers oder Python-Dokumentation basieren.

    
punarvak 17.02.2014, 11:29
quelle

2 Antworten

13

Ich denke, ein guter Weg, dies zu erreichen, besteht darin, einen Decorator zu erstellen und die Thread.join (timeout) -Methode zu verwenden. Denken Sie daran, dass es keinen guten Weg gibt, den Thread zu beenden, so dass er mehr oder weniger im Hintergrund läuft, solange Ihr Programm läuft.

Erstellen Sie zuerst einen Dekorateur wie folgt:

%Vor%

dann, tun Sie etwas wie folgt:

%Vor%

Sie können diesen Dekorator überall dort verwenden, wo Sie etwas benötigen:

%Vor%     
acushner 18.02.2014, 17:51
quelle
1

@ acushners Antwort angepasst für Python 3.5:

%Vor%     
Almenon 26.02.2018 01:53
quelle

Tags und Links