Python進程間通信multiprocess代碼實例
仔細說來,multiprocess不是一個模塊而是python中一個操作、管理進程的包。 之所以叫multi是取自multiple的多功能的意思,在這個包中幾乎包含了和進程有關(guān)的所有子模塊。由于提供的子模塊非常多,為了方便大家歸類記憶,我將這部分大致分為四個部分:創(chuàng)建進程部分,進程同步部分,進程池部分,進程之間數(shù)據(jù)共享。重點強調(diào):進程沒有任何共享狀態(tài),進程修改的數(shù)據(jù),改動僅限于該進程內(nèi),但是通過一些特殊的方法,可以實現(xiàn)進程之間數(shù)據(jù)的共享。
有了之前多線程使用以及線程間queue的基礎(chǔ),多進程以及進程間通信就很好理解了,下面是多進程基本語法以及進程間通信簡單示例
#多進程基本語法 import multiprocessing, time, os def process_test(): time.sleep(3) print("my multiprocessing test") print("my pprocess id is",os.getppid()) print("my process id is",os.getpid()) if __name__ == '__main__': #多線程必須寫在if __name__后面,為什么??? process = multiprocessing.Process(target=process_test) #啟動子進程 process.start() #多進程間數(shù)據(jù)通信,多進程的queue實際上是python將一個queue序列化后再反序列化給其它進程 #定義一個函數(shù),第一個形參傳遞一個進程queue def m_queue_test(Queue, name): Queue.put(("multiprocess queue test",name)) #put一次只能傳遞一個數(shù)據(jù)對象,多個對象必須使用列表 元組 字典等傳遞 if __name__ == '__main__': q = multiprocessing.Queue() #主進程實例化一個進程queue process2 = multiprocessing.Process(target=m_queue_test, args=(q, "zsq")) #將q傳遞給子進程,由子進程往里面?zhèn)鬟f數(shù)據(jù) process2.start() print(q.get())#主進程從queue里面讀數(shù)據(jù)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python文件操作seek()偏移量,讀取指正到指定位置操作
這篇文章主要介紹了python文件操作seek()偏移量,讀取指正到指定位置操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07Pytorch實現(xiàn)簡單自定義網(wǎng)絡(luò)層的方法
這篇文章主要給大家介紹了關(guān)于Pytorch實現(xiàn)簡單自定義網(wǎng)絡(luò)層的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2022-05-05Python實現(xiàn)在PyPI上發(fā)布自定義軟件包的方法詳解
在Python中我們經(jīng)常使用pip來安裝第三方Python軟件包,其實我們每個人都可以免費地將自己寫的Python包發(fā)布到PyPI上。本文我們就將詳細介紹如何發(fā)布測試包,需要的可以參考一下2022-06-06Keras load_model 導(dǎo)入錯誤的解決方式
這篇文章主要介紹了Keras load_model 導(dǎo)入錯誤的解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06