python多執行緒————7、ThreadPoolExecutor執行緒池
阿新 • • 發佈:2018-11-12
所用到的模組:from concurrent.futures import ThreadPoolExecutor,as_completed,wait,FIRST_COMPLETED
1、建立執行緒池:executor = ThreadPoolExecutor(max_workers= )
2、提交執行函式到執行緒池:task = executor.submit(func,(args))
3、獲取執行結果:task.result()
4、判斷執行緒是否完成:task.done()
5、取消還沒執行的執行緒:task.cancel()
6、利用as_completed獲取執行緒完成結果
all_task = [executor.submit(get_html,(url)) for url in urls]
for future in as_completed(all_task):
data = future.result()
print("get page {}".format(data))
7、通過executor的map獲取已經完成的task值
for data in executor.map(get_html,urls):
print(data)
8、使用wait()方法阻塞執行緒
全篇程式碼如下
from concurrent.futures import ThreadPoolExecutor,as_completed,wait,FIRST_COMPLETED #執行緒池,為什麼要執行緒池 #主執行緒中可以獲取一個執行緒的狀態或者某一個任務的狀態,以及返回值 #當一個執行緒完成的時候我們主執行緒能立即知道 #futures可以讓多執行緒和多程序編碼介面一致 import time def get_html(times): time.sleep(times) print("get page {} success".format(times)) return times executor = ThreadPoolExecutor(max_workers=2) #通過submit函式提交執行的函式到執行緒池中,submit是立即返回 # task1 = executor.submit(get_html,(5)) # task2 = executor.submit(get_html,(4)) # task3 = executor.submit(get_html,(1)) # time.sleep(6) urls = [4,2,3] all_task = [executor.submit(get_html,(url)) for url in urls] wait(all_task,return_when=FIRST_COMPLETED) for future in as_completed(all_task): data = future.result() print("get page {}".format(data)) #通過executor的map獲取已經完成的task的值 # for data in executor.map(get_html,urls): # print("get page {}".format(data)) # # #通過result方法可以獲取task的執行結果 # print(task1.result()) # #通過done方法判斷執行緒是否完成 # print(task1.done()) # #通過cancel方法取消還沒執行的執行緒 # print(task3.cancel())