18.5.5. Streams(基于协程的 API) — Python 文档
18.5.5. Streams(基于协程的 API)
源代码: :source:`Lib/asyncio/streams.py`
18.5.5.1. 流函数
笔记
此模块中的顶级函数仅用作便利包装器; 那里真的没有什么特别的,如果他们没有完全按照您的意愿行事,请随意复制他们的代码。
18.5.5.2. 流阅读器
- class asyncio.StreamReader(limit=_DEFAULT_LIMIT, loop=None)
此类是 不是线程安全的 。
limit 参数的默认值设置为 _DEFAULT_LIMIT,即 2**16 (64 KiB)
- exception()
获取异常。
- feed_eof()
确认EOF。
- feed_data(data)
在内部缓冲区中输入 data 字节。 任何等待数据的操作都将恢复。
- set_exception(exc)
设置例外。
- set_transport(transport)
设置传输。
- at_eof()
如果缓冲区为空并且 feed_eof() 被调用,则返回
True
。
18.5.5.3. 流写入器
- class asyncio.StreamWriter(transport, protocol, reader, loop)
包装运输。
这暴露了 write()、writelines()、can_write_eof()、write_eof()、get_extra_info() ] 和 close()。 它添加了
drain()
,它返回一个可选的 Future,您可以在其上等待流量控制。 它还添加了一个直接引用Transport
的传输属性。此类是 不是线程安全的 。
- transport
运输。
- can_write_eof()
如果传输支持 write_eof(),则返回 True,否则返回 False。 参见 WriteTransport.can_write_eof()。
- close()
关闭传输:参见 BaseTransport.close()。
- get_extra_info(name, default=None)
返回可选的传输信息:参见 BaseTransport.get_extra_info()。
- write(data)
将一些 data 字节写入传输:参见 WriteTransport.write()。
- writelines(data)
将数据字节的列表(或任何可迭代的)写入传输:参见 WriteTransport.writelines()。
- write_eof()
刷新缓冲数据后关闭传输的写端:参见 WriteTransport.write_eof()。
18.5.5.4. 流读取器协议
- class asyncio.StreamReaderProtocol(stream_reader, client_connected_cb=None, loop=None)
在 Protocol 和 StreamReader 之间进行调整的简单帮助器类。 协议的子类。
stream_reader 是一个 StreamReader 实例,client_connected_cb 是一个可选函数,在建立连接时使用 (stream_reader, stream_writer) 调用,loop 是要使用的事件循环实例。
(这是一个辅助类,而不是使 StreamReader 本身成为 Protocol 子类,因为 StreamReader 有其他潜在用途,并防止 的用户]StreamReader 意外调用了协议的不当方法。)
18.5.5.5. 不完整读取错误
- exception asyncio.IncompleteReadError
不完整读取错误,EOFError 的子类。
- expected
预期字节总数 (int)。
- partial
在到达流末尾之前读取字节字符串 (bytes)。
18.5.5.6. 限制超限错误
- exception asyncio.LimitOverrunError
- 查找分隔符时达到缓冲区限制。
- consumed
- 要消耗的字节总数。
18.5.5.7. 流示例
18.5.5.7.1。 使用流的 TCP 回显客户端
使用 asyncio.open_connection()
函数的 TCP 回显客户端:
18.5.5.7.2。 使用流的 TCP 回显服务器
使用 asyncio.start_server()
函数的 TCP 回显服务器:
18.5.5.7.3。 获取 HTTP 标头
查询通过命令行传递的 URL 的 HTTP 标头的简单示例:
用法:
或使用 HTTPS:
18.5.5.7.4。 注册一个打开的套接字以使用流等待数据
协程等待套接字使用 open_connection()
函数接收数据:
也可以看看
使用协议注册一个打开的套接字以等待数据 示例使用由 AbstractEventLoop.create_connection()
方法创建的低级协议。
watch a file descriptor for read events 示例使用低级 AbstractEventLoop.add_reader() 方法注册套接字的文件描述符。