Nous devons traiter une série de chiffres simples (0~9). S'il s'agit d'un nombre impair, nous devons boucler pour l'imprimer ; nombre pair, attendez l'heure correspondante et terminez toutes les tâches ; si c'est 0, c'est une erreur, mais il n'est pas nécessaire de terminer la tâche et certains traitements peuvent être personnalisés.
Définir la fonctionFonctionExigences de traitement
Le traitement de rappel renvoie des résultats, seuls les nombres pairs et 0 sont renvoyés. Les nombres impairs seront toujours exécutés ; ; le contrôle des threads est requis. Pool statut , vous devez lancer une exception pour un nombre pair et une fois 0 , et capturer gestion des exceptions .
Threadpool définit la concurrence du pool de threads
# -*- 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
pour renvoyer False lorsque 0, les autres nombres pairs renvoient True
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
Terminer indique que la tâche est terminée, induit à nouveau une exception et quitte le traitement du pool de threads
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)
Traitement 108, vous pouvez le voir en imprimant vers, 1 est traité en boucle, et une erreur est signalée lorsque 0 est traité ; lorsque 8 est traité, la tâche se termine
Liste de numéros d'entrée à tester et n'importe quel autre mot pour arrêter
108
continuer pour 1
commencer pour 0 et attendre 4s
commencer pour 8 et attendre 8s
continuer pour 1
continuer pour 1
continuer pour 1
erreur bcs 0
continuer pendant 1
Pause bcs 0 mais continuera
continuer pendant 1
continuer pendant 1
continuer pendant 1
continuer pendant 1
arrêt pour 8
Saisissez la liste de numéros à tester et tout autre mot à quitter
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!