標籤:開啟 參數 記憶體 sleep charm 共用記憶體 print false 定義類
#multiprocess.process模組#process模組是一個建立進程的模組,藉助這個模組,可以完成進程的建立# Process([group[,target[,name[,args[,kwargs]]]]]) ,由該執行個體化得到的對象,# 表示一個子進程的任務(尚未啟動) #注意(參數介紹): #1.需要使用關鍵字參數的方式來指定參數 #2.args指定的為傳給target函數的位置參數,是一個元組形式,必須有逗號 #3.group參數為使用,值始終未None #4.target表示調用對象,即子進程要執行的任務 #5.args表示調用對象的字典,kwargs={"name_":"json","age":19} #6.name為子進程的名字 #方法介紹: #1.p.start():啟動進程,並調用該子進程中的p.run()方法 #2.p.run():進程啟動時啟動並執行方法,正是它去調用target指定的函數, # 我們自訂類的類中一定要實現該方法 #3.p.terminate():強制終止進程p,不會進行任何清理操作 #4.p.is_alive():如果仍然運行,返回True #5.p.join(timeout):主進程等待p終止(注意:主進程處於等的狀態,而p #是處於啟動並執行狀態)timeout是可選的超出時間,需要強調的是p.join只能join #主start開啟的進程,而不能join住run開啟的進程. #屬性介紹: #1.p.daemon:預設值為False,如果設定為True,代表p為後天啟動並執行守護進程 #2.p.pid:進程的pid os.getpid() 當前運行進程的pid #3.p.exitcode:進程在運行時為None,如果為-N,表示被訊號N結束 #4.p.authkey:進程的身分識別驗證,預設是由os.urandom()隨機產生的32位字元的 #字串.這個鍵的用途是為了涉及網路連接的底層間通訊提供安全性 #這類串連只有在具有相同的身分識別驗證鍵時才能成功.#process模組建立進程和查看主進程的pid# from multiprocessing import Process## import time,os## def func(name):# print("hello",name)# print("我是子進程,我的pid是%s,父進程的pid是%s" %(os.getpid(),os.getppid()))## if __name__ == ‘__main__‘:# p = Process(target=func,args=("jack",)) # 元組# p.start() # 開始進程# time.sleep(1)# print("執行父進程了,父進程的pid是%s,父親的父進程(pycharm的)pid是%s" %(os.getpid(),os.getppid()))#結果: # hello jack # 我是子進程,我的pid是4604,父進程的pid是7728 # 執行父進程了,父進程的pid是7728,父親的父進程(pycharm的)pid是4476 ## 通過繼承建立進程# from multiprocessing import Process# class MyProcess(Process):# def __init__(self):# super(MyProcess, self).__init__()## def run(self):# print("執行子進程")## from multiprocessing import Process# import os# class MyPrpcess(Process):# def __init__(self,name):# super(MyPrpcess, self).__init__()# self.name = name# def run(self):# print(os.getpid())# print("%s正在聊天" %self.name)# if __name__ == ‘__main__‘:## p1 = MyPrpcess("jack")# p2 = MyPrpcess("tom")## p1.start() #start會調用run方法# p2.start()## p1.join()# p2.join()## print("主線程")# if __name__ == ‘__main__‘:# p = MyProcess() ## p1.start()# 是指,解譯器告訴作業系統,去幫我開啟一個進程, 就緒狀態# p1.run()# 告訴作業系統,現在馬上幫我執行這個子進程 執行#結果: 執行子進程# join()方法:# from multiprocessing import Process# import time# def func(name):# time.sleep(2)# print("hesllo",name)# print("執行子進程")## if __name__ == ‘__main__‘:# p = Process(target=func,args=("jack",))# p.start()# p.join()# print("執行主進程")#結果:# hesllo jack# 執行子進程# 執行主進程# join()的作用:是讓主進程等待進程執行完. # 現象:主進程執行到這句話,主進程阻塞住,等待子進程子進程執行#開啟一個正常的子進程,父進程會等待子進程結束後,父進程也就是程式才結束# 如何把父進程和子進程之間的關係變為同步或者非同步? #父進程執行join,就會變成同步,不執行join,父進程和子進程就是非同步關係 #注意: #join 必須放在start()後面#多進程之間無法共用記憶體# from multiprocessing import Process## def func(i):# print("我是%s"%i) # 調用四次都是相互獨立的# #print(n) # 無法調用n# if __name__ == ‘__main__‘:# n = 100# addr = ["河南","湖北","山東","北京"]# for i in addr:# p = Process(target=func,args=(i,))# p.start()#結果: # 我是河南 # 我是湖北 # 我是山東 # 我是北京# 多個子進程(子進程的執行順序不是根據啟動順序決定)# from multiprocessing import Process# import random# import time# def func(i):# print("我是%s"%i)# if __name__ == ‘__main__‘:# lst = []# addr = ["河南","湖北","山東","北京"]# for i in addr:# p = Process(target=func,args=(i,))# p.start()# lst.append(p)# time.sleep(1)# [p.join() for p in lst]# print("我選%s" %(random.choice(addr)))#結果:# 我是河南# 我是湖北# 我是山東# 我是北京# 我選北京(隨機出現)# 多進程同時運行,join方法1# from multiprocessing import Process## def func(name):# print("hello",name)## if __name__ == ‘__main__‘:# lst = []# for i in range(5):# p = Process(target=func,args=("alex",))# p.start()# lst.append(p)# p.join()# print("執行父進程")#結果:# hello alex# hello alex# hello alex# hello alex# hello alex# 執行父進程#多進程同時運行,join方法2# from multiprocessing import Process# import time## def func(name):# print("hello",name)# time.sleep(1)## if __name__ == ‘__main__‘:# lst = []# for i in range(5):# p = Process(target=func,args=("jack",))# p.start()# lst.append(p)# [p.join() for p in lst]# print("父進程執行")#結果:# hello jack# hello jack# hello jack# hello jack# hello jack# 父進程執行
python進程建立過程和方法