简单IO通道库
yet-another-io-channels-librar的Python项目详细描述
频道
提供统一的文件对象和套接字的简单包装 两者的接口。
示例:
pipe_chan = PipeChannel(sys.stdin.fileno(), sys.stdout.fileno())
sock_chan = SocketChannel(socket.create_connection(('127.0.0.1', 8080))
课程
通道
频道是不同频道的基类。每个频道 实现以下方法:
read(self)
执行非阻塞读取并返回任何可用字节。提高
EndpointClosedException
如果通道关闭。
write(self, *data)
将字节块写入通道。引发EndpointClosedException
。
close(self)
关闭频道并释放资源。
get_fd(self)
返回可用于poll
或
epoll
用于阅读。引发NotImplementedError
if(自定义)通道
不支持阅读。
每个通道都有一个buffering
属性(只读)。等于
'line'
用于线路缓冲信道。否则应该是'bytes'
但是除了'line'
之外的任何值都可以工作。
实现了以下通道类:
管道
PipeChannel(faucet=None, sink=None, *, buffering='bytes')
faucet
应该是打开读取的文件描述符。sink
应该
是一个打开用于写入的文件描述符。如果两者都提供,则
频道是双向的。将faucet
设置为非阻塞模式。
如果buffering
设置为'line'
,则通道使用行缓冲
阅读。如果没有完成,每个read
调用都将返回b''
即使有任何数据也可用。如果通道关闭
但是缓冲区中有数据,对read
的调用将返回
缓冲直至耗尽。最后一行可能是不完整的行(不
'\n'
最后)。
socketchannel
SocketChannel(sock, *, buffering='bytes')
为非阻塞IO包装插槽。有关更多信息,请参见pipechannel
buffering
参数。
测试通道
(在封装通道中。测试)
TestChannel(*, buffering='bytes')
有关buffering
参数的详细信息,请参见pipechannel。
提供put
和get
方法来将数据馈送到read
并获取
分别为“书面”数据。
轮询器
poller是select.poll
的包装器,它还支持接受和
跟踪TCP/Unix客户端。
Poller(*, buffering='bytes')
创建轮询器对象。所有接受的客户端通道都继承
buffering
参数。
register(self, channel)
注册用于轮询的通道。
add_server(self, sock)
注册服务器套接字。轮询器将接受传入连接和 自动注册客户端。
unregister(self, channel)
删除已注册的频道。如果频道不在 注册的。
close_all(self)
关闭所有注册的频道和服务器。
poll(self, timeout=None)
执行对select.poll()
的单个调用。timeout
是
轮询的秒数或无限轮询的秒数。返回值是
通道的对列表格式为(data, channel)
,服务器套接字的对列表格式为((addr, client_channel), sock)
。addr
取决于套接字
键入。对于基于线路的信道,单个poll
调用将返回一个
每个可用行的结果。