Wir müssen eine Reihe einzelner Ziffern (0~9) verarbeiten. Wenn es sich um eine ungerade Zahl handelt, müssen wir eine Schleife ausführen , um sie zu drucken gerade Zahl, warten Sie auf die entsprechende Zeit und schließen Sie alle Aufgaben ab. Wenn es 0 ist Es ist ein Fehler, aber es besteht keine Notwendigkeit, die Aufgabe zu beenden, und einige Verarbeitungen können angepasst werden.
Funktion definierenFunktionVerarbeitungsanforderungen
Die Rückrufverarbeitung gibt Ergebnisse zurück, es werden immer nur gerade Zahlen und 0 zurückgegeben ; Thread-Kontrolle ist erforderlich Pool Status , Sie müssen eine Ausnahme für eine gerade Zahl und 0 Mal auslösen und Ausnahmebehandlung erfassen.
Threadpool definiert Thread-Pool-Parallelität
# -*- coding: utf-8 -*- from threadpool import makeRequests, ThreadPool import time from multiprocessing import Process
class Finish(SyntaxWarning): pass
class PauseInfo(SyntaxWarning): pass pause_num = 0
so, dass bei 0 False zurückgegeben wird, andere gerade Zahlen geben True zurück
def func(para): if para == pause_num: print('start for %d and wait %ds' % (para, 4)) time.sleep(4) print('error bcs ',para) return False if para % 2 == 0: print('start for %d and wait %ds' % (para, para)) time.sleep(para) print('stop for', para) return True while True: print('continue for', para) time.sleep(para)
def callback(request, result): if result: raise Finish else: raise PauseInfo
Finish zeigt dies an die Aufgabe ist abgeschlossen, löst erneut eine Ausnahme aus und beendet die Thread-Pool-Verarbeitung;
def main_thread(paras): pool = ThreadPool(10) requests = makeRequests(callable_=func, args_list=paras, callback=callback) [pool.putRequest(req) for req in requests] while True: try: pool.wait() except Finish as e: raise SystemExit except PauseInfo as e: print('Pause bcs %d but will continue' % pause_num) except Exception as e: print('Unknown error so will quit') raise SystemExit
if name == 'main': while True: s = input('Input number list to test and any other word to quit\n') paras = [] for para in s: if para.isnumeric(): paras.append(int(para)) else: break try: thread_test = Process(target=main_thread, args=(paras,)) thread_test.start() thread_test.join(timeout=20) except TimeoutError as e: print('task timeout') except Exception as e: print('unknow error:',e)
Verarbeitung 108, Sie können es durch Drucken sehen, 1 wird in einer Schleife verarbeitet, und ein Fehler wird gemeldet, wenn 0 verarbeitet wird; wenn 8 verarbeitet wird, endet die Aufgabe
Eingabenummernliste zum Testen und irgendein anderes Wort zum Aufhören
108
weiter für 1
beginne mit 0 und warte 4 Sekunden
beginne mit 8 und warte 8 Sekunden
weiter mit 1
weiter mit 1
weiter mit 1
Fehler bcs 0
weiter für 1
Pause bcs 0, wird aber fortgesetzt
weiter für 1
weiter für 1
weiter für 1
weiter für 1
Stopp für 8
Geben Sie die Nummernliste zum Testen und ein beliebiges anderes Wort zum Beenden ein
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Beispielcodes für die Threadpool-Task-Beendigung in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!