1. 程式人生 > >Python(多程序multiprocessing模組)

Python(多程序multiprocessing模組)

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。

 

 

每一個程序都有根程序