python併發程式設計之多程序

2022-08-23 16:06:12 字數 3348 閱讀 8977

今天學習了python併發程式設計之多程序

一、multiprocessing模組介紹

python中的多執行緒無法利用多核優勢,如果想要充分地使用多核cpu的資源(os.cpu_count()檢視),在python中大部分情況需要使用多程序。python提供了multiprocessing。

multiprocessing模組用來開啟子程序,並在子程序中執行我們定製的任務(比如函式),該模組與多執行緒模組threading的程式設計介面類似。

multiprocessing模組的功能眾多:支援子程序、通訊和共享資料、執行不同形式的同步,提供了process、queue、pipe、lock等元件。

需要再次強調的一點事:與執行緒不同,程序沒有任何共享狀態,程序修改的資料,改動僅限於該程序內。

二、process類的介紹

建立程序的類:

process([group[,target[,name[,args[,kwargs] ] ] ] ] ),由該類例項化得到的物件,表示乙個子程序中的任務(尚未啟動)

強調:1、需要使用關鍵字的方式來指定引數

2、args指定的為傳給target函式的位置引數,是乙個元祖形式,必須有逗號

引數介紹:

1、group引數未使用,值始終未none

2、target表示呼叫物件,即子程序要執行的任務

3、args表示呼叫物件的位置引數元祖,args=(1,2,'egon',)

4、kwargs表示呼叫物件的字典,kwargs =

5、name為子程序的名稱

方法介紹:

1、p.start(): 啟動程序,並呼叫該子程序中的p.run()

2、p.run(): 程序啟動時執行的方法,正是它去呼叫target指定的函式,我們自定義類的類中一定要實現該方法

3、p.terminate(): 強制終止程序p,不會進行任何清理操作,如果p建立了子程序,該子程序就成了殭屍程序,使用該方法需要特別小心這種情況。如果p還儲存了乙個鎖那麼也將不會被釋放,進而導致死鎖。

4、p.is_alive(): 如果 p仍然執行,返回true

5、p.join([timeout]):    主線程等待p終止(強調:是主線程處於等的狀態,而p是處於執行的狀態)。timeout是可選的超時時間,需要強調的是,p.join只能join住start開啟的程序,而不能hoin住run開啟的程序。

屬性介紹

1、p.daemon:    預設值為false,如果設為true,代表p為後台執行的守護程序,當p的父程序終止時,p也隨之終止,並且設定為true後,p不能建立自己的新程序,必須在p.start()之前設定

2、p.name:    程序的名稱

3、p.pid: 程序的pid

4、p.exitcode: 程序在執行時為none、如果為-n,表示被訊號n結束

三、process類的使用

if __name__ == '__main__'

由於windows沒有fork,多處理模組啟動乙個新的python程序並匯入呼叫模組。

如果匯入時呼叫process(),那麼這將啟動無限繼承的新程序(或直到機器耗盡資源)。

建立並開啟子程序的兩種方式

#

開程序的方法一:

import

time

import

random

from multiprocessing import

process

defpiao(name):

print('

%s piaoing

' %name)

time.sleep(random.randrange(1,5))

print('

%s piao end

' %name)

if__name__ == '

__main__

'p1 = process(target = piao,args = ('

egon

',)) #

必須加,號

p2 = process(target = piao,args = ('

alex

',))

p3 = process(target = piao,args = ('

wupeiqi

',))

p4 = process(target = piao,args = ('

yuanhao

',))

p1.start()

p2.start()

p3.start()

p4.start()

print('

主線程'

)

#

開程序的方法二:

import

time

import

random

from multiprocessing import

process

class

piao(process):

def__init__

(self,name):

super().

__init__

() self.name =name

defrun(self):

print('

%s piaoing

' %self.name)

time.sleep(ramdon.randrange(1,5))

print('

%s piao end

' %self.name)

if__name__ == '

__init__

'p1 = piao('

egon')

p2 = piao('

alex')

p3 = piao('

wupeiqi')

p4 = piao('

yuanhao')

p1.start()

p2.start()

p3.start()

p4.start()

print('

主線程')

程序之間的記憶體空間是隔離的

from multiprocessing import

process

n = 100

defwork():

global

n n =0

print('

子程序內:

',n)

if__name__ == '

__init__

'p = process(target =work)

p.start()

print('

主程序內:

',n)

併發程式設計之多程序

程序理論 一 什麼是程序?程序 正在進行的乙個過程或者說乙個任務。而負責執行任務則是cpu。二 程序與程式的區別 程式僅僅只是一堆 而已,而程序指的是程式的執行過程。同乙個程式執行兩次,那也是兩個程序 三 併發與並行 並行處理 parallel processing 是計算機系統中能同時執行兩個或者...

python併發程式設計之多程序一

一,什麼是程序 程序是作業系統結構的基礎 是乙個正在執行的程式 計算機中正在執行的程式例項 可以分配給處理器並由處理器執行的乙個實體 二,程序與程式的區別 程序即執行中的程式,從中即可知,程序是在執行的,程式是非執行的,當然本質區別就是動態和靜態的區別。三,併發與並行解釋一 並行是指兩個或者多個事件...

Python併發程式設計之多程序(理論)

程序 正在記憶體中執行的一道程式。程式指的是一堆 而程序指的是程式執行的過程。通乙個程式執行兩次,就是兩道程序。併發 偽並行,看起來是同時執行,其實是cpu不斷切換的結果。用單個cpu加多道技術就能實現。並行 同時執行,cpu的乙個核執行一道程式,多核cpu或多個cpu才能實現。同步 在發出乙個功能...