Select
Posted momo8238
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Select相关的知识,希望对你有一定的参考价值。
Python的select()方法直接调用操作系统的IO接口,它监控sockets,open files, and pipes(所有带fileno()方法的文件句柄)何时变成readable 和writeable, 或者通信错误,select()使得同时监控多个连接变的简单,并且这比写一个长循环来等待和监控多客户端连接要高效,因为select直接通过操作系统提供的C的网络接口进行操作,而不是通过Python的解释器。
需求:用select (多路复用)模拟一个 socket server。可以接收多并发。
1. 一开始是检测自己,如果我有活动了,就说明有客户端要连我了。
#用select去模拟socket,实现单线程下的多路复用 import select import socket import queue server=socket.socket() server.bind((‘localhost‘,9000)) server.listen(1024) server.setblocking(False) #设置为不阻塞,accept/recv没有数据都不阻塞,只会报错。 inputs=[server,] #先检测自己,如果我有活动了,说明有客户端要连我了。 outputs=[] select.select(inputs,outputs,inputs) #第一个参数:操作系统发现100个里面有1个在活动,就会返回这100个。需要检测哪些链接就放进来。 #第二个参数: #第三个参数:让操作系统检测100个的哪个有问题,就把有问题的返回。 server.accept()
运行结果:卡住了,有客户端进来时才会不卡。
C:\abccdxddd\Oldboy\python-3.5.2-embed-amd64\python.exe C:/abccdxddd/Oldboy/Py_Exercise/Day10/select_socket_server.py
2.
以上是关于Select的主要内容,如果未能解决你的问题,请参考以下文章