concurrent.futures.ThreadPoolExecutor zum beenden zwingen
Verfasst: Dienstag 9. Juli 2013, 15:20
Hallo,
ich hab in meinem Programm den concurrent.futures.ThreadPoolExecutor verwendet um loops auszuführen, und möchte diese beim Beenden vom Programm abbrechen, da das Programm sonst nicht beendet.
Ich bekomme es einfach nicht hin das Future objekt zu beenden.
Und einen loop zu bauen der auf eine globale variable prüft kann ich auch nicht benutzen, weil ich im loop socket.recv aufrufe und das nicht unterbricht.
Gibt es eine Möglichkeit den threadpool irgendwie zu beenden? del und auf den Garbagecollector warten habe ich auch schon versucht, klappt leider auch nicht.
Alternativ: gibt es eine Möglichkeit sock.recv und sock.accept abzubrechen?
Oder sollte ich in dem Programmteil lieber das threading modul verwenden?
ich hab in meinem Programm den concurrent.futures.ThreadPoolExecutor verwendet um loops auszuführen, und möchte diese beim Beenden vom Programm abbrechen, da das Programm sonst nicht beendet.
Code: Alles auswählen
>>> from concurrent.futures import ThreadPoolExecutor as TPE
>>> def loop():
while True:
pass
>>> f = threadpool.submit(loop)
>>> f.cancel()
False
>>> f.running()
True
>>> threadpool.shutdown(False)
>>> f.running()
True
>>>
Und einen loop zu bauen der auf eine globale variable prüft kann ich auch nicht benutzen, weil ich im loop socket.recv aufrufe und das nicht unterbricht.
Code: Alles auswählen
>>> running = True
>>> def loop():
while running:
sock.recv(1024) # läuft nicht weiter, bis die bytes empfangen sind.
Alternativ: gibt es eine Möglichkeit sock.recv und sock.accept abzubrechen?
Oder sollte ich in dem Programmteil lieber das threading modul verwenden?