4.1 - 并发编程 - 进程练习题

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

 


posted @ 2018-04-02 15:47  Alice的小屋  阅读(230)  评论(0编辑  收藏  举报