程序池與執行緒池

2022-07-28 22:21:29 字數 1755 閱讀 6027

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

池雖然降低了程式的執行效率,但是保證了硬體的安全(硬體的發展跟不上軟體的速度)

1.concurrent.futures 模組提供了高度封裝的非同步呼叫介面

2.threadpoolexecutor:執行緒池:提供非同步呼叫

3.processpoolexecutor: 程序池,提供非同步呼叫

1.submit()

非同步提交任務

2.result()

取得結果

3.add_done_callback(fn)

**函式

4.shutdown()

關閉池子

from concurrent.futures import

threadpoolexecutor

import

time

pool = threadpoolexecutor(5) #

括號內可以傳引數指定執行緒池內的執行緒個數,如果不傳,預設是當前所在計算機的cpu個數乘5

deftask(n):

print

(n) time.sleep(1)

return n ** 2 #

返回乙個結果

#pool.submit(task,1) # 朝執行緒池中提交任務 非同步提交

#print('主')

t_list =

for i in range(20): #

這裡一次性提供了20個,但是上方的執行緒個數只有5個,所以列印結果就會以5個一次列印,直到取完

res = pool.submit(task,i) #

朝執行緒池中提交任務 非同步提交

#print(res.result()) # 原地等待任務返回結果

pool.shutdown()

#關閉池子 等待池子中所有的任務執行完畢之後 才會往下執行**

for p in

t_list:

print(p.result())

from concurrent.futures import

processpoolexecutor

import

time

import

ospool = processpoolexecutor(6) #

如果不傳,預設是當前計算機cpu的個數

"""池子中建立的程序/執行緒建立一次就不會再建立了

至始至終用的都是最初的那幾個

這樣的話節省了反覆開闢程序/執行緒的資源

"""def

task(n):

print(n,os.getpid()) #

檢視當前程序號

time.sleep(2)

return n**2

defcall_back(n):

print('

拿到了非同步提交任務的返回結果:

',n.result())

"""非同步**機制:當非同步提交的任務有返回結果之後,會自動觸發**函式的執行

"""if

__name__ == '

__main__':

t_list =

for i in range(20):

res = pool.submit(task,i).add_done_callback(call_back) #

提交任務的時候 繫結乙個**函式 一旦該任務有結果 立刻執行對於的**函式

執行緒池與程序池

從python3.2開始,標準庫為我們提供了concurrent.futures模組,它提供了threadpoolexecutor和processpoolexecutor兩個類,實現了對threading和multiprocessing的更高階的抽象,是使用非同步實現,充分利用cpu提高程式執行效率...

執行緒池與程序池

為什麼要裝到容器中 可以避免頻繁的建立和銷毀 程序 執行緒 來的資源開銷 可以限制同時存在的執行緒數量 以保證伺服器不會應為資源不足而導致崩潰 幫我們管理了執行緒的生命週期 管理了任務的分配 from concurrent.futures import threadpoolexecutor,proc...

執行緒池與程序池

from concurrent.futures import processpoolexecutor p processpoolexecutor 5 deftask n print n if name main for i in range 10 p.submit task,i submit 提交任...