python socketserver监听多端口多进程
多进程监听多端口
# 多线程socket
# 程序监听两个端口,端口逻辑相同其中一个端口放在子进程下
# 每次请求会在产生一个进程处理请求
import SocketServer
from multiprocessing import Process
class MyServer(SocketServer.BaseRequestHandler):
def handle(self):
conn=self.request
conn.sendall('hello')
while True:
data=str(conn.recv(1024))
conn.sendall('server:'+data)
if __name__ == '__main__':
server1=SocketServer.ForkingTCPServer(('127.0.0.1',8000),MyServer)
server1.max_children=2
server2 = SocketServer.ForkingTCPServer(('127.0.0.1', 9000), MyServer)
server2.max_children = 2
p=Process(target=server2.serve_forever,args=())
p.start()
# server1需放在p.start后启动不然会阻塞进程,server2无法启动
server1.serve_forever()
p.join()
# print 'hah'
多线程把ForkingTCPServer换成ThreadingTCPServer去掉max_children配置即可
注:
坑! 若使用多线程,因为无法配置线程数,并发太高会导致服务器产生很多进程也许会达到服务器显示的单个用户最多进程数,从而导致异常(linux 默认普通用户限制1024)
client
import socket
ip=('127.0.0.1',8000)
sk=socket.socket()
sk.connect(ip)
sk.settimeout(10)
while True:
data=sk.recv(1024)
print('receive: %s',data)
inp=raw_input('please input:')
sk.sendall(bytes(inp))
if inp == 'exit':
break
sk.close()
分类:
python
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 别做抢活的导演:代码中的抽象层次原则
· 从 Redis 客户端超时到 .NET 线程池挑战
· C23和C++26的#embed嵌入资源指南
· 「EF Core」框架是如何识别实体类的属性和主键的
· 独立开发,这条路可行吗?
· 从 Redis 客户端超时到 .NET 线程池挑战:饥饿、窃取与阻塞的全景解析
· 2025年中总结:我想我克服公众演讲的恐惧了,一个社恐分子突破自我的故事
· 阿里巴巴为什么禁止超过3张表join?
· 实践经验:互联网项目起步指南
· 让 AI 帮我部署网站,太方便了!