"""
基于fork的多进程网络并发
1.创建监听套接字
2.等待接收客户端请求
3.客户端连接创建新的进程处理客户端请求
4.原进程继续等待其他客户请求
5.如果客户端退出,则销毁对应的进程
"""
import socket
import signal
import os
# 全局变量
HOST = "127.0.0.1"
PORT = 9090
ADDR = (HOST, PORT)
def dispose(val):
while True:
data = val.recv(1024)
if not data:
break
print(">>", data.decode())
val.send(b"OK")
val.close()
# 创建套接字
soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置端口立即重用
soc.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定套接字
soc.bind(ADDR)
# 设置监听
soc.listen(5)
# 处理僵尸进程
signal.signal(signal.SIGCHLD, signal.SIG_IGN)
print("Listen the port 9090...")
while True:
# 循环处理客户端连接
try:
c, addr = soc.accept()
print("Connect from", addr)
except KeyboardInterrupt:
os._exit(0)
except Exception as e:
print(e)
continue
# 创建子进程处理客户端事物
pid = os.fork()
if pid == 0:
soc.close()
# 客户端套接字处理具体事物
dispose(c)
# 处理完成销毁子进程
os._exit(0)
else:
# 父进程等待其他用户连接不需要和子进程通信
c.close()
python基于fork的多进程网络并发
最新推荐文章于 2025-02-21 14:39:32 发布