python停止线程池_详解python中Threadpool线程池任务终止示例代码
需求
加入我們需要處理一串個位數(0~9),奇數時需要循環打印它;偶數則等待對應時長并完成所有任務;0則是錯誤,但不需要終止任務,可以自定義一些處理。
關鍵點
定義func函數處理需求
callback處理返回結果,只有偶數和0返回;奇數會一直執行;要控制線程池狀態,則需要針對偶數和0時拋出異常,并捕獲異常處理。
threadpool定義線程池并發
實現# -*- coding: utf-8 -*-
from threadpool import makeRequests, ThreadPool
import time
from multiprocessing import Process
異常定義和特殊值(0)定義class Finish(SyntaxWarning):
passclass PauseInfo(SyntaxWarning):
pass
pause_num = 0
func函數定義
0時返回False,其他偶數返回Truedef 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)
callback定義def callback(request, result):
if result:
raise Finish
else:
raise PauseInfo
線程池處理
Finish標識任務完成,再次誘發異常退出線程池處理;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)
結果驗證
處理108,看打印可以看到,1被循環處理,0處理的時候報錯;8處理完畢則任務結束
Input number list to test and any other word to quit
108
continue for 1
start for 0 and wait 4s
start for 8 and wait 8s
continue for 1
continue for 1
continue for 1
error bcs 0
continue for 1
Pause bcs 0 but will continue
continue for 1
continue for 1
continue for 1
continue for 1
stop for 8
Input number list to test and any other word to quit
以上就是詳解python中Threadpool線程池任務終止示例代碼的詳細內容,更多請關注php中文網其它相關文章!
本文原創發布php中文網,轉載請注明出處,感謝您的尊重!
總結
以上是生活随笔為你收集整理的python停止线程池_详解python中Threadpool线程池任务终止示例代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ft2232驱动安装方法_关于Win10
- 下一篇: python编写剪刀石头布游戏_闲着也是