1.进程之间的内存空间是共享的还是隔离的?下述代码的执行结果是什么?
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()
p.join()
print('主进程内: ',n)
子进程内: 0
主进程内: 100
2.基于多进程实现并发的套接字通信?
服务端
from socket import *
from multiprocessing import Process
def talk(conn):
while True:
try:
data = conn.recv(1024)
if not data:break
conn.send(data.upper())
except ConnectionResetError:
break
conn.close()
def sever(ip,port):
sever = socket(AF_INET, SOCK_STREAM)
sever.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
sever.bind((ip, port))
sever.listen(5)
while True:
conn,addr = sever.accept()
p = Process(target=talk,args=(conn,))
p.start()
sever.close()
if __name__ == '__main__':
sever("127.0.0.1",8888)
客户端
from socket import *
client = socket(AF_INET,SOCK_STREAM)
client.connect(("127.0.0.1",8888))
while True:
msg = input(">>:").strip()
if not msg:continue
client.send(msg.encode("utf-8"))
data = client.recv(1024)
print(data.decode("utf-8"))
3.改写下列程序,分别别实现下述打印效果
保证最后输出-------->4
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()
p1.join()
p2.join()
p3.join()
print('-------->4')
-------->1
-------->3
-------->2
-------->4
4.思考下列代码的执行结果有可能有哪些情况?为什么?
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-------")
print("主")
main-------
主
456
end456