一、创建进程的两种方式
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()对象创建的列表/字典可以被多个进程同时使用,实现数据共享'''