併發程式設計之執行緒池,程序池

2022-06-29 22:33:18 字數 2655 閱讀 2122

受限於硬體的發展,硬體跟不上軟體的發展

在保證計算機硬體安全的情況下,最大限度的利用了計算機

池其實是降低了程式的執行效率,但是保證了計算機硬體的安全

我們再使用程序和執行緒時,不可能無限制的去開程序或執行緒。因此我們需要用到程序池,執行緒池來解決這一問題。

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):

print

(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):

print

(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...