进程相关内容

一、创建进程的两种方式

 1 #方式一:直接创建
 2 from multiprocessing import Process
 3 import time
 4 def f(name):
 5     time.sleep(1)
 6     print('hello',name,time.ctime())
 7 
 8 if __name__ == '__main__':
 9     p_list = []
10     for i in range(3):
11         p = Process(target=f,args=('alex',))    #创建子进程
12         p_list.append(p)
13         p.start()     #启动子进程
14     for p in p_list:
15         p.join()
16     print('end')
17 
18 '''方式2:通过类创建'''
19 from multiprocessing import Process
20 import time
21 class MyProcess(Process):
22     def __init__(self):
23         super(MyProcess, self).__init__()
24     def run(self):
25         time.sleep(1)
26         print('hello',self.name,time.ctime())
27 if __name__ ==  '__main__':
28     p_list = []
29     for i in range(3):
30         p = MyProcess()
31         p_list.append(p)
32         p.start()
33     for p in p_list:
34         p.join()

二、queue实现数据共享

 1 from multiprocessing import Process,Queue
 2 
 3 def f(q):
 4     q.put([5,'hel'])   #往队列里加内容
 5 
 6 def f2(q):
 7     print(q.get())
 8 
 9 if __name__ == '__main__':
10     q = Queue()    #创建进程队列对象
11 
12     p_list = []
13     for i in range(3):
14         p = Process(target=f,args=(q,))   #创建进程
15         p_list.append(p)
16     for p in p_list:
17         p.start()
18     for p in p_list:
19         p.join()
20 
21     p2_list = []
22     for i in range(3):
23         p2 = Process(target=f2,args=(q,))
24         p2_list.append(p2)
25     for p2 in p2_list:
26         p2.start()
27     for p2 in p_list:
28         p2.join()
29 '''1.实现的功能:通过三个进程往一个队列里存三条内容,然后用另外三个进程从队列取内容并打印
30    2.实现的方式:在创建子进程时将主进程中创建的队列对象通过参数传到子进程中'''

三、Pipe实现进程通信

 1 '''通过Pipe对象实现进程通信'''
 2 from multiprocessing import Process,Pipe
 3 
 4 def f(conn):
 5     conn.send('')
 6     conn.close()
 7 
 8 if __name__ == '__main__':
 9     parent_conn,child_conn = Pipe()
10     p = Process(target=f,args=(child_conn,))   #创建进程
11     p.start()
12     print(parent_conn.recv())
13     p.join()
14 
15 '''通过Pipe对象实现进程通信,类似于socket通信一收一发'''

四、manager实现数据共享

 1 from multiprocessing import Process,Manager
 2 
 3 def f(d,l,n):
 4     d[n] = '1'
 5     d['2'] = 2
 6     d[0.25] = None
 7     l.append(n)
 8 
 9 if __name__ == '__main__':
10     with Manager() as manager:
11         d = manager.dict()   #用manager创建字典
12         l = manager.list()   #用manager创建列表
13         p_list = []
14         for i in range(10):
15             p = Process(target=f,args=(d,l,i))
16             p.start()
17             p_list.append(p)
18         for p in p_list:
19             p.join()
20 
21         print(d)
22         print(l)
23 
24 '''1.十个进程同时去操作同一字典/列表
25    2.用Manager()对象创建的列表/字典可以被多个进程同时使用,实现数据共享'''
原文地址:https://www.cnblogs.com/Finance-IT-gao/p/10678779.html