python進程建立過程和方法

來源:互聯網
上載者:User

標籤:開啟   參數   記憶體   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進程建立過程和方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.