方法 asyncio.streams.StreamReader.read(byte_count) 读取的字节太少

kev*_*rpe 5 python-3.x python-asyncio

我观察到 asyncio/Python3.4/Windows7 的一些罕见行为,其中asyncio.streams.StreamReader.read(byte_count)读取的字节数少于byte_count字节。我无法可靠地重现该行为,但如果有足够的网络活动(数千次读取),我可能会看到它一次

的文档read(byte_count)说: Read up to n bytes.

参考:https://docs.python.org/3/library/asyncio-stream.html#streamreader

英语短语“up to”表示它有时可能读得更少(!)。正如我最初理解协程的行为一样:在收到预期的字节数之前它不会返回。

  1. 我理解read(byte_count)正确吗?
  2. 有其他人观察到同样的行为吗?

我当前的解决方法是检查收到的字节数。如果不完整,则read(byte_count)使用剩余字节数再次调用。(但这似乎违背了 的目的read(byte_count)。)

Mar*_*ler 5

是的,您理解正确:read(n)可能返回小于n. 这是正常的,您应该重复读取,直到由于 EOF 或某些错误而不再获得字节为止。