四 练习题
1、思考开启进程的方式一和方式二各开启了几个进程?
2、进程之间的内存空间是共享的还是隔离的?下述代码的执行结果是什么?
- from multiprocessing import Process
-
- n=100 #在windows系统中应该把全局变量定义在if __name__ == '__main__'之上就可以了
-
- def work():
- global n
- n=0
- print('子进程内: ',n)
-
-
- if __name__ == '__main__':
- p=Process(target=work)
- p.start()
- print('主进程内: ',n)
3、基于多进程实现并发的套接字通信?
4、思考每来一个客户端,服务端就开启一个新的进程来服务它,这种实现方式有无问题?
三 练习题
1、改写下列程序,分别别实现下述打印效果
- from multiprocessing import Process
- import time
- import random
-
- def task(n):
- time.sleep(random.randint(1,3))
- print('-------->%s' %n)
-
- if __name__ == '__main__':
- p1=Process(target=task,args=(1,))
- p2=Process(target=task,args=(2,))
- p3=Process(target=task,args=(3,))
-
- p1.start()
- p2.start()
- p3.start()
-
- print('-------->4')
效果一:保证最先输出-------->4
- -------->4
- -------->1
- -------->3
- -------->2
效果二:保证最后输出-------->4
- -------->2
- -------->3
- -------->1
- -------->4
效果三:保证按顺序输出
- -------->1
- -------->2
- -------->3
- -------->4
2、判断上述三种效果,哪种属于并发,哪种属于串行?
二 练习题
思考下列代码的执行结果有可能有哪些情况?为什么?
- from multiprocessing import Process
-
- import time
- def foo():
- print(123)
- time.sleep(1)
- print("end123")
-
- def bar():
- print(456)
- time.sleep(3)
- print("end456")
-
- if __name__ == '__main__':
- p1=Process(target=foo)
- p2=Process(target=bar)
-
- p1.daemon=True
- p1.start()
- p2.start()
- print("main-------")