一、執行緒池、程序池
開程序、開執行緒都需要消耗資源,只不過兩者比較的情況執行緒消耗的資源比較少
在計算機能夠承受範圍之內最大限度的利用計算機
什麼是池?
在保證計算機硬體安全的情況下最大限度的利用計算機
池其實是降低了程式的執行效率,但是保證了計算機硬體的安全
(硬體的發展跟不上軟體的速度)
#呼叫from concurrent.futures import
threadpoolexecutor,processpoolexecutor
#建池子
pool = processpoolexecutor() #
預設是當前計算機cpu的個數
pool = threadpoolexecutor(5) #
括號可穿引數,不傳預設代表cpu個數*5
res =pool.submit(task,i).add_done_callback(call_back)
#提交任務,繫結乙個**函式,一旦該任務有結果,立刻執行對於的**函式
res.result()
#原地等待任務的返回結果
pool.shutdown()
#關閉池子,等待池子中所有的任務執行完畢之後,才會往下執行**
import案例time
from concurrent.futures import
threadpoolexecutor,processpoolexecutor
#pool = threadpoolexecutor(5) # 括號內可以傳引數指定執行緒池內的執行緒個數
## # 也可以不傳,不傳預設是當前所在計算機的 cpu的個數乘5
import
ospool = 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(5):
## 提交任務的時候,繫結乙個**函式,一旦該任務有結果,立刻執行對於的**函式
#res = pool.submit(task,i).add_done_callback(call_back)
## print(res.result()) # 原地等待任務的返回結果##
### pool.shutdown() # 關閉池子,等待池子中所有的任務執行完畢之後,才會往下執行**
## print(t_list)
## for p in t_list:
## print('>>>:',p.result())
### 最終版本
if__name__ == '
__main__':
for i in range(5):
res = pool.submit(task,i).add_done_callback(call_back)
二、協程
完全是程式設計師自己想出來的名詞,單執行緒下實現併發(併發:切換+儲存狀態)
程序、執行緒、協程之間區別:
程序:資源單位
執行緒:執行單位
協程:單執行緒下實現併發
'''三、io模型:gevent模組
'''from gevent import monkey;monkey.patch_all() #
由於該模組經常被使用,建議寫成一行
from gevent import
spawn
import
time
'''注意gevent模組沒辦法自動識別time.sleep等io情況
需要手動再配置乙個引數
'''def
heng():
print("哼"
) time.sleep(2)
print('哼'
)def
ha():
print('哈'
) time.sleep(3)
print('哈'
)def
heiheihei():
print('
嘿嘿嘿'
) time.sleep(5)
print('
嘿嘿嘿'
)start =time.time()
g1 =spawn(heng)
g2 = spawn(ha) #
spawn 會檢測所有的任務
g3 =spawn(heiheihei)
g1.join()
g2.join()
g3.join()
print(time.time()-start)
阻塞io
非阻塞io
多路復用io
非同步io
併發程式設計 執行緒池程序池協程
1.socket服務端實現併發 現在回來想網路程式設計服務端需要滿足哪幾點需求 2.程序池執行緒池介紹 執行緒不可能無限制的開下去,總要消耗和占用資源 程序池執行緒池概念 硬體有極限,為了減輕硬體壓力,所以有了池的概念 注意協程這個概念完全是程式設計師自己想出來的東西,它對於作業系統來說根本不存在。...
協程 IO模型
一 協程 1.定義 單執行緒實現併發,可以再應用程式當中控制多個任務的切換 儲存狀態。優點 在應用程式級別的速度要遠遠高於作業系統的切換 缺點 多個任務一旦有乙個任務阻塞住了,沒有及時切換,整個執行緒都將阻塞在原地,該執行緒內的其他任務都不能繼續執行了。所以,在引入協程之後,就需要檢測單執行緒下所有...
併發程式設計 協程
一 協程介紹 協程 是單執行緒下的併發,又稱微執行緒,纖程。英文名coroutine。一句話說明什麼是執行緒 協程是一種使用者態的輕量級執行緒,即協程是由使用者程式自己控制排程的。需要強調的是 對比作業系統控制線程的切換,使用者在單執行緒內控制協程的切換 優點如下 缺點如下 總結 必須在只有乙個單執...