Python(多程序multiprocessing模組)
阿新 • • 發佈:2018-11-05
day31
http://www.cnblogs.com/yuanchenqi/articles/5745958.html
由於GIL的存在,python中的多執行緒其實並不是真正的多執行緒,如果想要充分地使用多核CPU的資源,在python中大部分情況需要使用多程序。Python提供了非常好用的多程序包multiprocessing,只需要定義一個函式,Python會完成其他所有事情。藉助這個包,可以輕鬆完成從單程序到併發執行的轉換。
多程序
1 from multiprocessing import Process#程序 2 import time 3 def f(name):4 time.sleep(1) 5 print('hello', name,time.ctime()) 6 7 if __name__ == '__main__': 8 p_list=[] 9 for i in range(3):#和threading,差不多 10 p = Process(target=f, args=('alvin',)) 11 p_list.append(p) 12 p.start() 13 for i in p_list: 14 p.join() 15 print('end') 16 17 #延遲一秒後全部輸出
延遲1面。輸出。
執行結果:
/home/nizhipeng/PycharmProjects/learnPython/venv/bin/python /home/nizhipeng/PycharmProjects/learnPython/week8/多程序.py hello alvin Mon Nov 5 22:25:45 2018 hello alvin Mon Nov 5 22:25:45 2018 hello alvin Mon Nov 5 22:25:45 2018 end Process finished with exit code 0
類式呼叫多執行緒
1 from multiprocessing import Process 2 import time 3 4 class MyProcess(Process):#繼承 5 def __init__(self): 6 super(MyProcess, self).__init__() 7 #self.name = name 可以從新賦值 8 9 def run(self): 10 time.sleep(1) 11 print ('hello', self.name,time.ctime())#hello MyProcess-3 Mon Nov 5 21:20:11 2018 12 13 14 if __name__ == '__main__': 15 p_list=[] 16 for i in range(3): 17 p = MyProcess() 18 p.start() 19 p_list.append(p) 20 21 for p in p_list: 22 p.join() 23 24 print('end')
使用方式和threading多執行緒一樣。
執行結果:
hello MyProcess-1 Mon Nov 5 22:27:51 2018 hello MyProcess-2 Mon Nov 5 22:27:51 2018 hello MyProcess-3 Mon Nov 5 22:27:51 2018 end Process finished with exit code 0
程序關係
1 from multiprocessing import Process 2 import os 3 import time 4 def info(title): 5 print(title)#傳入資訊 6 print('module name:', __name__)#main 7 print('parent process:', os.getppid())#父程序號 8 print('process id:', os.getpid())#本程序號 9 #每一個程序都有根程序 10 11 def f(name): 12 info('\033[31;1mfunction f\033[0m') 13 print('hello', name) 14 15 if __name__ == '__main__': 16 info('\033[32;1mmain process line\033[0m') 17 time.sleep(3) 18 p = Process(target=info, args=('bob',))#子程序 ,其父程序是主程序 19 p.start() 20 p.join()
執行結果:
main process line module name: __main__ parent process: 4319 process id: 1896 bob module name: __main__ parent process: 1896 process id: 1929 Process finished with exit code 0
從輸出結果可以看出,子程序p的父程序號1896是主程序號1896。主程序的父程序號是4319。
每一個程序都有根程序