在保證計算機安全的情況下最大限度的利用計算機
池雖然降低了程式的執行效率,但是保證了硬體的安全(硬體的發展跟不上軟體的速度)
1.concurrent.futures 模組提供了高度封裝的非同步呼叫介面2.threadpoolexecutor:執行緒池:提供非同步呼叫
3.processpoolexecutor: 程序池,提供非同步呼叫
1.submit()非同步提交任務
2.result()
取得結果
3.add_done_callback(fn)
**函式
4.shutdown()
關閉池子
from concurrent.futures importthreadpoolexecutor
import
time
pool = threadpoolexecutor(5) #
括號內可以傳引數指定執行緒池內的執行緒個數,如果不傳,預設是當前所在計算機的cpu個數乘5
deftask(n):
(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 importprocesspoolexecutor
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 提交任...