併發程式設計之程序

2022-07-17 03:21:12 字數 2338 閱讀 8403

在python中大部分情況需要使用多程序。python提供了multiprocessing。

multiprocessing模組用來開啟子程序,並在子程序中執行我們定製的任務(比如函式),該模組與多執行緒模組threading的程式設計介面類似。 multiprocessing模組的功能眾多:支援子程序、通訊和共享資料、執行不同形式的同步,提供了process、queue、pipe、lock等元件。

1.建立程序的類

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

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

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

引數介紹:

1 group引數未使用,值始終為none target表示呼叫物件,即子程序要執行的任務

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

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

4 name為子程序的名稱

方法介紹:

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

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

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

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

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

from multiprocessing import

process

import

time

deftask(name):

print('

%s is runing

' %(name))

time.sleep(3)

print('

%s is done

' %(name))

if__name__ == '

__main__':

p = process(target=task,args=('元組'

,))

#p = process(target=task,kwargs=) 兩種傳參方式

p.start() #

啟動程序

print('

----主程序----

')

view code

from multiprocessing import

process

import

time

#定義類的方式

class

myprocess(process):

def__init__

(self,name):

self.name =name

super().

__init__

()

def run(self): #

必須定義乙個run方法

print('

%s is runing

' %(self.name))

time.sleep(3)

print('

%s is done

' %(self.name))

if__name__ == '

__main__':

p = myprocess('張三'

) p.start()

print('

---主程序---

')

view code

3.殭屍程序與孤兒程序

一:殭屍程序

殭屍程序:乙個程序使用fork建立子程序,如果子程序退出,而父程序並沒有呼叫wait或waitpid獲取子程序的狀態資訊,那麼子程序的程序描述符仍然儲存在系統中。這種程序稱之為僵死程序。

二:孤兒程序

孤兒程序:乙個父程序退出,而它的乙個或多個子程序還在執行,那麼那些子程序將成為孤兒程序。孤兒程序將被init程序(程序號為1)所收養,並由init程序對它們完成狀態收集工作。

併發程式設計之 守護程序

一,守護程序 守護程序其實就是乙個 子程序 守護 伴隨 守護程序會伴隨主程序的 執行完畢後而死掉。二,為何用守護程序?關鍵字就兩個 程序 當父程序需要將乙個任務併發出去執行,需要將該任務放到乙個子程序裡。守護 當該子程序內的 在父程序 執行完畢後就沒有任何存在的意義了,就應該將該子程序設定為 守護程...

併發程式設計多程序之佇列

程序彼此之間互相隔離,要實現程序間通訊 ipc multiprocessing模組支援兩種形式 佇列和管道,這兩種方式都是使用訊息傳遞的。建立佇列的類 底層就是以管道和鎖定的方式實現 queue maxsize 建立共享的程序佇列。queue是多程序安全的佇列,可以使用queue實現多程序之間的資料...

併發程式設計之程序與執行緒

2.2 並行與併發 2.3 應用 單核cpu下,多執行緒不能實際提高程式執行效率,只是為了能夠在不同的任務之間切換,不同執行緒輪流使用cpu,不至於乙個執行緒總占有cpu,別的執行緒沒法幹活。多核cpu可以並行跑多個執行緒,但能否提高程式執行效率還是要分情況的 1 有些任務,經過精心設計,將任務拆分...