【选择模块】选择输入输出多路复用和选择实现FTP

  

选择是全平台通用的输入输出多路复用模块。最大连接数:1024 .

调查和epoll没有最大连接数限制,但只能用在linux平台。

选择器是再封装模块,推荐使用。下篇会讨论。

<代码类=" descname "> 选择rlist , wlist , xlist , 超时 ?

<李>

这是一个简单的接口Unix <代码类=" xref c c-func docutils文字notranslate "> 系统调用。前三个参数可等待对象的序列:整数代表文件描述符或对象与一个无参数方法命名为<代码类=" xref py py-meth docutils文字notranslate "> 返回一个整数:

空序列是允许的,但接受三个空序列是与平台相关的。(众所周知工作>文件对象(例如<代码类=" docutils文字notranslate "> 代码,或对象返回的<代码类=" xref py py-func docutils文字notranslate "> 或<代码类=" xref py py-func docutils文字notranslate "> ),套接字对象返回的<代码类=" xref py py-func docutils文字notranslate "> 代码。,您还可以定义一个 包装类,只要

<李>

rlist :等到准备阅读

<李>

wlist :等到准备写

<李>

xlist :等待一个“异常条件”(见系统所认为的手册页这样的条件)

方法,属性参数作用示例选择(rlist、wlist rlist, [timout=1])



调查()
没人用了,已经升级为epoll


epoll (sizehint=1,旗帜=0)

sizehint 通知epoll预期数量的事件注册。,它必须是积极的,或<引用> 1 使用默认值。这是>

是旗帜弃用,完全忽略。,然而,当提供的,它的值必须<代码类=" docutils文字notranslate "> 或<代码类=" docutils文字notranslate "> 代码,否则<代码类=" docutils文字notranslate ">


(仅支持> 调查对象;参见后面的一节由devpoll对象的方法。
kevent ()

<代码类=" descname "> kevent 鉴别, 过滤器=KQ_FILTER_READ , 标志=KQ_EV_ADD , fflags=0 , data=https://www.yisu.com/zixun/0 , udata=https://www.yisu.com/zixun/0 ? <李>

(仅支持> Kevent对象下面的方法支持Kevent对象。


kqueue ()
(仅支持> kqueue kqueue对象下面的方法支持的对象。


import 插座   import 操作系统   import 选择   import 队列   import  json         class  SelectFTP(对象):   ,,,def  __init__(自我,ip,端口):   ,,,,,,,self.server =, socket.socket (socket.AF_INET, socket.SOCK_STREAM)   ,,,,,,,self.server.setblocking (0)   ,,,,,,,self.server.bind ((ip,端口))   ,,,,,,,self.server.listen (20)   ,,,,,,,      ,,,,,,,self.inputs =, (self.server)   ,,,,,,,self.outputs =, []   ,,,,,,,self.file_attr =, {}   ,,,,,,,#,file_attr 格式:file_attr(插座):{func: & # 39; & # 39;,,文件名:& # 39;& # 39;,,len: 999年,recv_len: 0},,,,,,   ,,,,,,,self.socket_queue =, {}      ,,,,   ,,,def 上传(自我,,袜子,write_data):   ,,,,,,,#,if  os.path.isfile (self.file_attr(袜子)[& # 39;文件名# 39;]):   ,,,,,,,with 开放(self.file_attr(袜子)[& # 39;文件名# 39;],,& # 39;a + & # 39;), as 文件:   ,,,,,,,,,,,file.write(数据)   ,,,,,,,,,,,self.file_attr(袜子)[recv_len], +=, len (write_data)   ,,,,,,,,,,,if  self.file_attr(袜子)[recv_len],==, self.file_attr(袜子)(len):   ,,,,,,,,,,,,,,,del  self.file_attr(袜子)   ,,,,,,,,,,,,,,,file.close ()   ,,,,,,,   ,,   ,,,def 下载(自我,,袜子,,* args):   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

【选择模块】选择输入输出多路复用和选择实现FTP