1. 什麼是池?
在保證計算機硬體安全的情況下最大限度的利用計算機,池其實是降低了程式的執行效率,但是保證了計算機的硬體安全,不會造成計算機崩掉,伺服器掛掉,受限於硬體的發展才有了池的概念,其實都是保證硬體的安全
2. 執行緒池與程序池
執行緒池也就意味著乙個池子,裡面事先已經放好了執行緒,假如裡面有十個人,十個人就是十個執行緒,裡面有空的位置,就往裡面走,假如來了第十乙個人,那就在外面等著,等著這個池子裡面的只要有乙個人走了,就立馬把外面
等的那個人叫到池子裡面去。
from concurrent.futures importthreadpoolexecutor,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 提交任...