Ich habe einen Thread, wo ich ein Thread-Ereignis verwenden, um den Thread von außerhalb der Zielfunktion zu steuern.Python Threading Event
flag = threading.event()
In meiner Zielfunktion, ich habe so etwas wie dies:
def functionname(arguments):
flag.clear()
while not flag.wait(timeout = 0.5):
# do something.
, wenn ich den Faden zurückkehren möchten, von meiner Hauptfunktion sage ich, flag.set(). Dann wird flag auf true gesetzt, meine Zielfunktion beendet die Ausführung und der Thread ist abgeschlossen.
Nun, wenn ich flag.wait (timeout = 5) in meiner Hauptfunktion verwenden möchte, erwarte ich, zu blockieren und warten Sie fünf Sekunden, um den "etwas tun" Teil des Codes auszuführen. Allerdings sehe ich, dass der "etwas tun" Teil des Codes alle 0,5 Sekunden wie üblich ausgeführt wird und meine Hauptfunktion für fünf Sekunden blockiert ist.
Die Wartemethode muss blockieren, bis das Flag wahr ist oder das optionale Timeout endet. Es blockiert meine Hauptfunktion und nicht die Zielfunktion. Kann jemand wissen, warum das sein könnte?
PS: I definiert das Flag Ereignis in meinem Hauptfunktion und übergeben sie als ein Argument an die Zielfunktion
ich verwirrt bin .... Sie tun 'flag.wait (timeout = 5)' und Sie möchten, dass die Threads 'flag.wait (timeout = 0,5)' warten 5 Sekunden lang machen, anstatt ? Das funktioniert nicht. Das Zeitlimit des Hauptthreads ist unabhängig vom Kind. Was ist dein Ziel? Möchten Sie steuern, wie lange das Kind im Hauptthread wartet? – tdelaney
Der Flag.wait (Timeout = 0,5) wird anfänglich geschrieben, wenn die Zielfunktion alle 0,5 Sekunden ausgeführt werden soll. Jetzt, wenn ich es zu 5 Sekunden ändern möchte, verwende ich flag.wait (5). Das Flag ist ein Threading-Ereignis, das nur für die Zielfunktion und nicht für den Hauptthread ausgeführt werden sollte. –