1.思考开启进程的方式一和方式二各开启了几个进程?
开启进程有两种方式,Process(),自定义类继承(Process),开启个数是一样的
2.进程之间的内存空间是共享的还是隔离的?下述代码的执行结果是什么?
隔离的
1 from multiprocessing import Process
2 n=100 #在windows系统中应该把全局变量定义在if __name__ == '__main__'之上就可以了
3 def work():
4 global n
5 n=0
6 print('子进程内: ',n)
7
8 if __name__ == '__main__':
9 p=Process(target=work)
10 p.start()
11 p.join()
12 print('主进程内: ',n)
13 """
14 子进程内: 0
15 主进程内: 100
16 """
3.基于多进程实现并发的套接字通信?
server:
1 # -*- coding:utf-8 -*-
2 import socket
3 from multiprocessing import Process
4
5 def task(conn):
6 while True:
7 try:
8 data = conn.recv(1024)
9 if not data:continue
10 conn.send(data.upper())
11 except Exception:
12 break
13 conn.close()
14
15 def server(ip,port):
16 server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
17 server.bind((ip,port))
18 server.listen(5)
19 while True:
20 conn,client_addr=server.accept()
21 p = Process(target=task,args=(conn,))
22 p.start()
23 server.close()
24
25 if __name__ == "__main__":
26 server('127.0.0.1',8080)
client:
1 # -*- coding:utf-8 -*-
2 import socket
3
4 client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
5 client.connect(('127.0.0.1',8080))
6 while True:
7 msg = input('>>>:').strip()
8 if not msg:continue
9 client.send(msg.encode('utf-8'))
10 data = client.recv(1024)
11 print(data.decode('utf-8'))
4.思考每来一个客户端,服务端就开启一个新的进程来服务它,这种实现方式有无问题? 有 不能无限开进程
5.改写下列程序,分别别实现下述打印效果
1 from multiprocessing import Process
2 import time
3 import random
4
5 def task(n):
6 time.sleep(random.randint(1,3))
7 print('-------->%s' %n)
8
9 if __name__ == '__main__':
10 p1=Process(target=task,args=(1,))
11 p2=Process(target=task,args=(2,))
12 p3=Process(target=task,args=(3,))
13
14 p1.start()
15 # p1.join()
16 p2.start()
17 # p2.join()
18 p3.start()
19 # p3.join()
20
21 p1.join()
22 p2.join()
23 p3.join()
24
25 print('-------->4')
26
27 # 效果一:保证最先输出 - ------->4 并发
28 #
29 # -------->4
30 # -------->1
31 # -------->3
32 # -------->2
33 # 效果二:保证最后输出 - ------->4 并发
34 #
35 # -------->2
36 # -------->3
37 # -------->1
38 # -------->4
39 # 效果三:保证按顺序输出 串行
40 #
41 # -------->1
42 # -------->2
43 # -------->3
44 # -------->4