ホームページ >バックエンド開発 >Python チュートリアル >PythonでのThreadpoolスレッドプールタスク終了サンプルコードの詳細説明
一連の 1 桁 (0 ~ 9) を処理する必要があります。それが奇数の場合は、それを ループ 出力する必要があります。偶数の場合は、対応する時間待つ必要があります。すべてのタスクを完了します。0 はエラーですが、タスクを終了する必要はなく、一部の処理をカスタマイズできます。
関数の定義処理要件
コールバック処理は結果を返します。スレッドプールステータスを制御するには、常に偶数と奇数のみが返されます。偶数と 0 の場合は、例外処理をキャッチします。
threadpoolはスレッドプールの同時実行性を定義する実装# -*- 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
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
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 SystemExitmain 関数はテスト プロセスを開始します
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)
108
1 のために継続します
0 から開始して 4 秒待機します
8で開始して8秒待ち
1で継続
1で継続
1で継続
エラーbcs 0
1で継続
bcs 0を一時停止しますが継続します
1で継続
1で継続
1で継続
1で継続
8で停止
テストする数字のリストと終了する他の単語を入力してください
以上がPythonでのThreadpoolスレッドプールタスク終了サンプルコードの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。