執行緒池的兩張方法 submit 和map
from concurrent.futures importthreadpoolexecutor
import
time
#def
sayhello(a):
time.sleep(2)
return
"hello:
"+adef
main():
seed = ["
a","
b","c"
]
#不使用執行緒
start1 =time.time()
for each in
seed:
t1 =sayhello(each)
(t1)
end1 =time.time()
print("
time1:
"+str(end1-start1))
print('
------------------submit----------------------')
#執行緒池submit用法
#1.先把值存放在列表中
#2.在遍歷列表取返回值
#3.將遍歷獲取的結果存放在列表中
start2 =time.time()
lst =
result_lst =
with threadpoolexecutor(3) as executor:
for each in
seed:
t2 =executor.submit(sayhello, each)
for i in
lst:
(i.result())
(result_lst)
end2 =time.time()
print("
time2:
"+str(end2-start2))
print('
---------------map----------------------')
#執行緒池map的用法
#map的引數:迭代器
#map的返回值是:生成器
#1、獲取生成器(或直接使用list強制裝換)
#2、遍歷取值
#3、將遍歷的結果放入新的列表
map_lst =
start3 =time.time()
with threadpoolexecutor(3) as executor1:
t3 =executor1.map(sayhello, seed)
for t in
t3:
(map_lst)
end3 =time.time()
print("
time3:
"+str(end3-start3))
if__name__ == '
__main__':
main()
other
from concurrent.futures importthreadpoolexecutor
import
time
#def
sayhello(a):
time.sleep(2)
foo = [1, a]
return
foodef
main():
seed = ["
a","
b","c"
]
#不使用執行緒
start1 =time.time()
for each in
seed:
t1 =sayhello(each)
(t1)
end1 =time.time()
print("
time1:
"+str(end1-start1))
print('
---------------map----------------------')
#執行緒池map的用法
#map 的結果是迭代器,使用for迴圈取值
map_lst =
start3 =time.time()
with threadpoolexecutor(3) as executor1:
t3 =executor1.map(sayhello, seed)
for t in
t3: map_lst.extend(t)
(map_lst)
end3 =time.time()
print("
time3:
"+str(end3-start3))
if__name__ == '
__main__':
main()
區別
map:1、提交的任務的函式是一樣的
2、引數:只需要提交一次目標函式,目標函式的引數放在乙個迭代器(列表,字典)
submit:
1、提交的任務函式是不一樣的,或者執行的過程之可能出現異常(使用map執行過程中發現問題會直接丟擲錯誤)
2、引數:submit每次都需要提交乙個目標函式和對應的引數
結果:map可以保證輸出的順序, submit輸出的順序是亂的
執行緒池的簡單實用
c 執行緒池threadpool的用法 最近,因為做專案的關係,用到了很多和執行緒有關的東西。由於以前對執行緒只是有乙個概括的了解,並沒有深入的研究過,所以在面對一些問題時,總會感覺到有心無力,為此也花費了大量的時間和精力。為了鞏固這方面的知識,特寫此文章和大家分享。1 最簡單的執行緒例子 clas...
python 執行緒池 Python的執行緒池
usr bin env python coding utf 8 concurrent 用於執行緒池和程序池程式設計而且更加容易,在python3.2中才有。import sys from concurrent.futures import threadpoolexecutor,as complete...
執行緒池總結
執行緒池基本思想 是一種物件池的思想,開闢一塊記憶體空間,裡面存放了眾多 未死亡 的執行緒,池中線程執行排程 由池管理器來處理。當有執行緒任務時,從池中取一根,執行完後執行緒物件歸池,這樣可以避免反覆建立執行緒物件鎖帶來的效能開銷,節約系統資源。1 動態建立執行緒池 2 建立固定大小的執行緒池 3 ...