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的主要内容,如果未能解决你的问题,请参考以下文章

常见的代码片段

ng-repeat 中的 select2 不起作用。看片段

是否有在单个活动中处理多个片段的 Android 设计模式?

Laravel:如何在控制器的几种方法中重用代码片段

试图显示2个表

Html页面中select下拉列表框别样用法,一个方法一劳永逸。