池
受限於硬體的發展,硬體跟不上軟體的發展
在保證計算機硬體安全的情況下,最大限度的利用了計算機
池其實是降低了程式的執行效率,但是保證了計算機硬體的安全
我們再使用程序和執行緒時,不可能無限制的去開程序或執行緒。因此我們需要用到程序池,執行緒池來解決這一問題。
1.concurrent模組是用來建立並行的任務,提供了更高階別的介面
2.模組匯入程序池 與 執行緒池
from concurrent.futures import processpoolexecutor 程序池
from concurrent.futures import threadpoolexecutor 執行緒池
3.p = processpoolexecutor(max_works) 對於程序池 如果不寫max_works 預設是cpu數目
p= threadpoolexecutor(max_works) 對於執行緒池 如果不寫max_works 預設是cpu數目*5
4.p.submit(task,i)是非同步提交 task 是函式 i 是 task所需的引數
obj = p.submit(task,i) 返回的是乙個物件obj
obj.result()是函式返回的結果
p.shutdown() 關閉池子 相當於 close join
基於concurrent模組的執行緒池與程序池
1同步執行from concurrent.futures import
threadpoolexecutor,processpoolexecutor
2import
time34
deftask(n):
5print
(n)6 time.sleep(2)
7return n+189
defcall_back(n):
10print('
結果是:
',n.result())
1112
if__name__ == '
__main__':
13 start =time.time()
14 pool = threadpoolexecutor(5)15#
pool = processpoolexecutor(5)
16for i in range(7):
17 res =pool.submit(task,i).result()
18print
(res)
1920
pool.shutdown()
2122
print(time.time()-start)23#
14.00873589515686
from concurrent.futures import非同步執行threadpoolexecutor,processpoolexecutor
import
time
deftask(n):
(n) time.sleep(2)
return n+1
defcall_back(n):
print('
結果是:
',n.result()) if
__name__ == '
__main__':
start =time.time()
pool = threadpoolexecutor(5)
#pool = processpoolexecutor(5)
for i in range(7):
res =pool.submit(task,i)
pool.shutdown()
for p in
p_list:
print('
>>>:
',p.result())
print(time.time()-start) #
4.002536296844482
使用**函式實現非同步
from concurrent.futures import**函式實現非同步threadpoolexecutor,processpoolexecutor
import
time
deftask(n):
(n) time.sleep(2)
return n+1
defcall_back(n):
print('
結果是:
',n.result())
if__name__ == '
__main__':
start =time.time()
pool = threadpoolexecutor(5)
#pool = processpoolexecutor(5)
for i in range(7):
res = pool.submit(task,i).add_done_callback(call_back) #
非同步pool.shutdown()
print(time.time()-start)
#4.002536296844482
併發程式設計之 執行緒池
執行緒池做的工作主要是控制執行的執行緒的數量,處理過程中將任務放入佇列,然後再執行緒建立後啟動這些任務,如果執行緒數量超過了最大數量,超出數量的執行緒排隊等候,等其它執行緒執行完畢,再從佇列中取出任務來執行。他的主要特點為 執行緒復用 控制最大併發數,管理執行緒。第一 降低資源消耗。通過重複利用已建...
併發程式設計之執行緒池
步驟1 自定義拒絕策略介面 1 執行緒池狀態 threadpoolexecutor使用int的高3位來表示執行緒池狀態,低29位表示執行緒數量 從數字上比較,terminated tidying stop shutdown running 這些資訊儲存在乙個原子變數ctl中目的是將執行緒池狀態與執行...
併發程式設計 執行緒池與程序池
以時間換空間 程序池 乙個容器,這個容器限制住你開啟程序的數量,預設是os.cpu count 我的電腦是8核,所以能開啟8個,第一次肯定只能並行的處理8個任務,只要有任務完成,程序馬上就會接下乙個任務。實現 from concurrent.futures import processpoolexe...