程序池與執行緒池

2022-03-11 04:16:47 字數 1412 閱讀 2127

1. 什麼是池?

在保證計算機硬體安全的情況下最大限度的利用計算機,池其實是降低了程式的執行效率,但是保證了計算機的硬體安全,不會造成計算機崩掉,伺服器掛掉,受限於硬體的發展才有了池的概念,其實都是保證硬體的安全

2. 執行緒池與程序池

執行緒池也就意味著乙個池子,裡面事先已經放好了執行緒,假如裡面有十個人,十個人就是十個執行緒,裡面有空的位置,就往裡面走,假如來了第十乙個人,那就在外面等著,等著這個池子裡面的只要有乙個人走了,就立馬把外面
等的那個人叫到池子裡面去。

from concurrent.futures import

threadpoolexecutor,processpoolexecutor

import

time

importos#

pool = threadpoolexecutor(5) # 括號內可以傳引數指定執行緒池內的執行緒個數

## 也可以不傳 不傳預設是當前所在計算機的cpu個數乘5

pool = processpoolexecutor() #

預設是當前計算機cpu的個數

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

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

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

"""def

task(n):

print(n,os.getpid()) #

檢視當前程序號

time.sleep(2)

return n**2

defcall_back(n):

print('

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

',n.result())

"""提交任務的方式

同步:提交任務之後 原地等待任務的返回結果 期間不做任何事

"""#

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

#print('主')

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

"""if

__name__ == '

__main__':

t_list =

for i in range(20):

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

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

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

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

#for p in t_list:

#print('>>>:',p.result())

執行緒池與程序池

從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 提交任...