Suche Alternative zu ThreadPoolExecutor um Threads bzw. Prozesse zu beenden
Verfasst: Montag 11. August 2025, 19:35
Hallo,
zu meinem Python Problem:
Innerhalb einer Funktion starte ich mit ThreadPoolExecutor (concurrent.futures) mehrere Threads.
Die Funktion 8main) läuft weiter und es wird eine Schleife mit timeout startet.
In dieser Schleife wird u.a. abgefragt welche Threads zu dem Zeitpunkt noch nicht beendet sind.
Nach dem Ende der Schleife möchte ich alle Threads, die ihre Aufgabe bis dahin nicht geschafft haben, beendet (kill oder so)
Mit "ThreadPoolExecutor " könnte man zu diesem Zeitpunkt nur noch nicht begonnene Threads beenden, keine noch laufende.
Auch mit "multiprocessing" und 'threading' konnte ich dass gewünschte nicht umsetzen.
Im Voraus vielen Dank für Anregungen und Hinweise.
Gruß kasi45
zu meinem Python Problem:
Innerhalb einer Funktion starte ich mit ThreadPoolExecutor (concurrent.futures) mehrere Threads.
Die Funktion 8main) läuft weiter und es wird eine Schleife mit timeout startet.
In dieser Schleife wird u.a. abgefragt welche Threads zu dem Zeitpunkt noch nicht beendet sind.
Nach dem Ende der Schleife möchte ich alle Threads, die ihre Aufgabe bis dahin nicht geschafft haben, beendet (kill oder so)
Mit "ThreadPoolExecutor " könnte man zu diesem Zeitpunkt nur noch nicht begonnene Threads beenden, keine noch laufende.
Auch mit "multiprocessing" und 'threading' konnte ich dass gewünschte nicht umsetzen.
Im Voraus vielen Dank für Anregungen und Hinweise.
Gruß kasi45
Code: Alles auswählen
## info: sourceDict = self.sourceDict
## info: from concurrent.futures import ThreadPoolExecutor
## info: self.executor = ThreadPoolExecutor(max_workers=10)
futures = {self.executor.submit(self._getSource, titles, year, season, episode, imdb, provider[0], provider[1]): provider[0] for provider in sourceDict}
# der main thread laüft weiter
# weiterer code
timeout = 30
## hier beginnt eine Schleife mit "timeout"
for i in range(0, 4 * timeout):
if control.abortRequested: return sys.exit()
try:
if progressDialog.iscanceled():
#TODO
self.executor.shutdown(wait=False) # nur noch nicht begonnene threads kann man so beenden
break
except Exception as e:
pass
# weiterer code
# abfrage info zu allen noch nicht beendeten Threads
info = [name.upper() for future, name in futures.items() if not future.done()]
# weiterer code
# Ende Timeout Schleife
# hier sollten alle "Threads" beendet werden die in der vorgegebenen Zeit ihre Aufgabe nicht beenden konnten
return self.sources