python基于fork的多进程网络并发

"""
基于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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值