【发布时间】:2019-11-05 08:06:11
【问题描述】:
我尝试运行这个 asyncio 示例 https://docs.python.org/3.6/library/asyncio-stream.html?highlight=start_server#tcp-echo-server-using-streams
这行让我很困惑:
data = yield from reader.read(100) # data -> b'Hello World!'
客户端向服务器发送字符串'Hello World!',Bytearray长度小于100。
coroutine read(n=-1) 最多读取 n 个字节。如果 n 没有提供,或者设置 为 -1,读取到 EOF 并返回所有读取的字节。
如果收到 EOF 并且内部缓冲区为空,则返回一个 空字节对象。
这个方法是协程。
我没有在客户端发送EOF,那么为什么read 功能没有被阻止?
这是否意味着Bytearray 在string.encode 之后包含EOF?
【问题讨论】:
-
你检查
return和yield之间的区别了吗? -
对不起,
return这个词,我的意思是read函数执行的返回值(该值来自read函数内部的yield)。 -
我不太明白你的回答,如果可以,请重新表述。无论如何,我的评论是建议
yield和return之间存在差异,这可能是您混淆的根源。另外,如果 Bytearray 小于 100,你为什么期望它返回更多呢?那不是你的EOF吗? -
@MikeMajara 我希望服务器不会收到任何东西,因为 Bytearray 假设不包含
EOF并且长度小于 100。服务器的会话将被阻止,直到它收到指定的长度.
标签: python python-3.6 python-asyncio