在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 .建立開啟子程序的兩種方式2 p.run():程序啟動時執行的方法,正是它去呼叫target指定的函式,我們自定義類的類中一定要實現該方法
3 p.terminate():強制終止程序p,不會進行任何清理操作,如果p建立了子程序,該子程序就成了殭屍程序,使用該方法需要特別小心這種情況。如果p還儲存了乙個鎖那麼也將不會被釋放,進而導致死鎖
4 p.join([timeout]):主線程等待p終止(強調:是主線程處於等的狀態,而p是處於執行的狀態)。timeout是可選的超時時間,需要強調的是,p.join只能join住start開啟的程序,而不能join住run開啟的程序
from multiprocessing importview codeprocess
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('
----主程序----
')
from multiprocessing importview codeprocess
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('
---主程序---
')
3.殭屍程序與孤兒程序
一:殭屍程序殭屍程序:乙個程序使用fork建立子程序,如果子程序退出,而父程序並沒有呼叫wait或waitpid獲取子程序的狀態資訊,那麼子程序的程序描述符仍然儲存在系統中。這種程序稱之為僵死程序。
二:孤兒程序孤兒程序:乙個父程序退出,而它的乙個或多個子程序還在執行,那麼那些子程序將成為孤兒程序。孤兒程序將被init程序(程序號為1)所收養,並由init程序對它們完成狀態收集工作。
併發程式設計之 守護程序
一,守護程序 守護程序其實就是乙個 子程序 守護 伴隨 守護程序會伴隨主程序的 執行完畢後而死掉。二,為何用守護程序?關鍵字就兩個 程序 當父程序需要將乙個任務併發出去執行,需要將該任務放到乙個子程序裡。守護 當該子程序內的 在父程序 執行完畢後就沒有任何存在的意義了,就應該將該子程序設定為 守護程...
併發程式設計多程序之佇列
程序彼此之間互相隔離,要實現程序間通訊 ipc multiprocessing模組支援兩種形式 佇列和管道,這兩種方式都是使用訊息傳遞的。建立佇列的類 底層就是以管道和鎖定的方式實現 queue maxsize 建立共享的程序佇列。queue是多程序安全的佇列,可以使用queue實現多程序之間的資料...
併發程式設計之程序與執行緒
2.2 並行與併發 2.3 應用 單核cpu下,多執行緒不能實際提高程式執行效率,只是為了能夠在不同的任務之間切換,不同執行緒輪流使用cpu,不至於乙個執行緒總占有cpu,別的執行緒沒法幹活。多核cpu可以並行跑多個執行緒,但能否提高程式執行效率還是要分情況的 1 有些任務,經過精心設計,將任務拆分...