multiprocessing模組-Process
阿新 • • 發佈:2020-07-19
multiprocessing模組-Process
# multiple 多元化的
# processing 程序
# multiprocessing 多元的處理程序的模組
仔細說來,multiprocess不是一個模組而是python中一個操作、管理程序的包。 之所以叫multi是取自multiple的多功能的意思,在這個包中幾乎包含了和程序有關的所有子模組。由於提供的子模組非常多,為了方便大家歸類記憶,我將這部分大致分為四個部分:建立程序部分,程序同步部分,程序池部分,程序之間資料共享。
Process模組是一個建立程序的模組,藉助這個模組,就可以完成程序的建立。
import os from multiprocessing import Process def func(): print(os.getpid(),os.getppid()) # # pid process id 程序id # # ppid parent process id 父程序id if __name__ == '__main__': print('main:',os.getpid(),os.getppid()) p = Process(target=func) p.start() #main: 824 1272 #1508 824
#同時開啟多個子程序 import os import time from multiprocessing import Process def func(name,age): print('%s start'%name) time.sleep(1) print(os.getpid(),os.getppid(),name,age) if __name__ == '__main__': # 只會在主程序中執行的所有的程式碼你寫在name = main下 print('main :',os.getpid(),os.getppid()) arg_lst = [('alex',84),('太白', 40),('wusir', 48)] for arg in arg_lst: p = Process(target=func,args=arg) p.start() # 非同步非阻塞
# join的用法 import os import time import random from multiprocessing import Process def func(name,age): print('傳送一封郵件給%s歲的%s\n'%(age,name)) time.sleep(random.random()) print('傳送完畢') if __name__ == '__main__': arg_lst = [('大壯',40),('alex', 84), ('太白', 40), ('wusir', 48)] p_lst = [] for arg in arg_lst: p = Process(target=func,args=arg) p.start() p_lst.append(p) for p in p_lst:p.join() print('所有的郵件已傳送完畢') #p.join([timeout]):主執行緒等待p終止(強調:是主執行緒處於等的狀態,而p是處於執行的狀態)。timeout是可選的超時時間,需要強調的是,p.join只能join住start開啟的程序,而不能join住run開啟的程序