栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python fork多进程,线程并发

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python fork多进程,线程并发

 步骤:

服务端对应父进程 客户端对应子进程 父进程循环接收连接 为每个连接建立子进程 处理接受信息 

1.1多进程并发 

"""
fork多进程并发
"""
import signal
from socket import *
import os

# 全局变量
ADDR = ('0.0.0.0', 8888)

# 客户端处理函数
def handle(c):
    while True:
        data = c.recv(1024)
        if not data:
            break
        print(data.decode())
        c.send(b'ok')
    c.close()

# 创建监听套接字
s = socket()
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
s.bind(ADDR)
s.listen(3)

# 处理僵尸进程
# signal.signal(signal.SIGCHLD, signal.SIG_IGN)

# 循环等待客户端连接
print('Listen the port 8888...')
while True:
    try:
        c, addr = s.accept()
        print('Connect from', addr)
    except KeyboardInterrupt:
        s.close()
        os._exit(0) # 人为希望服务队退出
    except Exception as e:
        print(e)
        continue

    # 创建子进程处理连接的客户端请求
    pid = os.fork()
    if pid == 0:
        s.close()   # 子进程中没有需要用s
        # 处理客户端请求
        handle(c)
        os._exit(0)
    else:
        c.close()   # 父进程中没有需要用c

2.1多线程并发

 

"""
多线程并发
"""
import signal
from socket import *
import os
from threading import Thread

# 全局变量
ADDR = ('0.0.0.0', 8888)

# 客户端处理函数
def handle(c):
    while True:
        data = c.recv(1024)
        if not data:
            break
        print(data.decode())
        c.send(b'ok')
    c.close()

# 创建监听套接字
s = socket()
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
s.bind(ADDR)
s.listen(3)

# 处理僵尸进程
# signal.signal(signal.SIGCHLD, signal.SIG_IGN)

# 循环等待客户端连接
print('Listen the port 8888...')
while True:
    try:
        c, addr = s.accept()
        print('Connect from', addr)
    except KeyboardInterrupt:
        s.close()
        os._exit(0) # 人为希望服务队退出
    except Exception as e:
        print(e)
        continue

    t = Thread(target=handle, args=(c,))    # 若不传父线程每次连接 连接套接字就会被覆盖掉
    t.setDaemon(True)   # 主线程停止服务后 所有分支线程都终止
    t.start()

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/293722.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号