Python 併發程式設計

2021-08-29 01:59:25 字數 2410 閱讀 7840

1. 程序、執行緒、協程基本概念,建立、使用

2. 協程的應用(生成器----第三方模組)

3. 併發的實踐

程式執行起來之後建立的乙個程序。

建立程序已經學過使用multiprocessing.process類建立

(1)multiprocessing.process(),指定target引數,建立物件

(2)繼承multiprocessing.process,重寫run方法

需求:通過比較案例的執行時長,來比較不同的建立程序方式的執行速度

案例: io   計算密集型

累加求和方法

import time

def sum(a,b):

s=0for i in range(a,b+1):

s+=i

# time.sleep(0.5)

return s

① 不使用程序,不使用執行緒,直接執行

計算密集型:1.95s

io 密集型: 16s

if __name__=="__main__":

start=time.time()

# sum(0,10000000)

# sum(0,20000000)

sum(0,10)

sum(0,20)

end=time.time()

print("執行的時間{}".format(end-start))

程序池:負責維護一定數量(最大)的程序,可以向程序池提交任務,如果程序池中程序數量沒有達到上限,程序池會幫我們建立乙個新的程序,執行任務,否則如果程序池中的程序數量已經達到上限,新任務只能在程序池外等待,等待程序池內程序死亡,或者程序結束,才能再次建立新的程序執行任務。

from multiprocessing import pool 程序池建立程序

方式:from multiprocessing import pool

pool(程序池中最大的數量)

pool=pool(5)

(1)同步申請模式

序列(排隊執行)

from multiprocessing import pool

import os

def work():

print("當前程序的id={}".format(os.getpid()))

time.sleep(1)

# 使用程序池建立程序(同步模式建立程序)

if __name__=="__main__":

pool = pool(5)

for i in range(3):

print("第{}個任務執行完畢".format(i))

② 使用同步申請模式實現累加和案例

計算密集型  2.1s

io密集型    16.2s

程序池中使用同步方式申請程序,反而執行的比正常序列慢,因為向程序池申請程序也需要時間。

def sum2(b1,b2):

pool=pool(4)

if __name__=="__main__":

start=time.time()

# sum2(10000000,20000000)

sum2(10,20)

end=time.time()

print("執行的時間{}".format(end - start))

(2)非同步申請模式

非同步模式的使用方式

def work(index):

print("第{}個任務".format(index))

time.sleep(1)

if __name__=="__main__":

pool=pool(4)

for i in range(3):

# print("第{}個任務執行完畢".format(i)) # 不能保證執行完畢work之後才執行。

# 使用join搶占之前需要先關閉(暫時關閉,長久關閉)程序池

pool.close()

pool.join()

print("主程序執行結束")

使用multiprocessing.pool非同步模式申請的子程序被當成是後台程序。

如果希望子程序全部在主程序執行結束之前全部執行完畢,使用搶占程序的方式解決join

使用【程序池物件.join搶占主程序】

date: 2018-10-14

author: cymx66688

python併發程式設計 程序,併發

1.程序是乙個正在執行的程式,或者說是程式執行的過程,程序是個抽象概念 程序起源於作業系統,是作業系統最核心的概念,作業系統所有其他的概念都是圍繞程序展開 研究程序最底層就是在研究作業系統底層 2.序列 程序 乙個任務完完整整的執行完畢後,在執行下乙個任務 3.併發 程序 看起來多個任務是同時執行即...

python併發程式設計調優 python併發程式設計

併發程式設計是我們程式設計中常用的優化程式效能的手段,能提高cpu的使用率。一般使用是多執行緒,多程序,協程 一 python的全域性解釋鎖gil 我們目前跑的python程式大多數都是在cpython上執行的。cpython是有乙個全域性解釋鎖,具體什麼意思,可以兩個方面理解 在同一時刻,只能執行...

Python網路程式設計 併發程式設計

提取碼 tv0e 01 計算機基礎 1.cs client service 客戶端與服務端 2.通訊的過程 客戶端 作業系統 硬體 網路 硬體 作業系統 服務端 03 五層協議詳解 1.應用層 傳輸層 tcp udp 網路層 ip 資料鏈路層 物理層 04 傳輸層詳解 tcp協議 客戶端 服務端需要...