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

时间:2015-02-11 11:03:11

标签: python-3.x python-asyncio

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

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

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

英文短语"直到"表示它有时可能读得少(!)。正如我最初理解协程的行为:直到收到预期的字节数才会返回。

  1. 我是否理解read(byte_count)
  2. 有没有其他人观察到同样的行为?
  3. 我目前的解决方法是检查收到的字节数。如果不完整,请再次使用剩余字节数调用read(byte_count)。 (但这似乎打败了read(byte_count)的目的。)

2 个答案:

答案 0 :(得分:3)

是的,您理解正确:read(n)可能会返回少于n。这是正常的,你应该重复阅读,直到你因EOF或某些错误而得不到更多的字节。

答案 1 :(得分:1)

您应该使用StreamReader.readexactly()而不是StreamReader.read(): "准确读取n个字节。" https://docs.python.org/3/library/asyncio-stream.html#asyncio.StreamReader.readexactly