python实现高并发

理论方法

基于IO多路复用,windows中使用select实现,linux中使用select,pool,epoll实现。

windows中使用select,最多能监听1024个文件句柄,使用轮询检测;

Linux中使用select最多能监听1024个文件句柄,使用轮询检测;pool,监听个数不限制;epoll使用边缘触发,回调通知

IO多路复用-扩展知识

官方定义:帮助开发者监听多个IO句柄发生变化,用于帮助我们监听多个socket是否发生变化(连接服务器的socket,和发送消息的socket)

为什么使用IO多路复用:在单线程中,由于我们使用服务端与多个客户端收发消息时,由于python的代码是由上往下执行的,因此当服务端和第一个客户端收发消息时,服务端会处于accept这个状态,这样会造成等待,第二个客户端肯定不能和服务端进行交互,为了解决这个问题,引出了IO多路复用。

代码实现

import socket
import select
#可以连接很多个用户
sk1=socket.socket()
sk2=socket.socket()
sk1.bind(('127.0.0.1',8001))
sk2.bind(('127.0.0.1',8002))

while True:
    rlist,w,e=select,select([sk1,conn1,conn2],[],5)
    for sk in rlist:
        if sk==sk1:
            # 服务端socket发生变化,新用户来连接
            conn,addr=sk.accept()
            conn.send('hello')
            
        else:
            # 客户端socket发生变化,老用户发来了消息
            data=sk.recv()
            

 

转载于:https://www.cnblogs.com/djfboai/p/10909463.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值