1
66beta 2021-04-21 14:32:36 +08:00
不懂 python,但是文档里写了缓冲区需要回到最低水准才能继续写入
这里 await stream.drain() 应该为了保证你下一次对缓冲区的写入操作 |
2
abersheeran 2021-04-21 14:40:26 +08:00
这个就跟你写文件是一样的。write 只是写了,它可能留在缓冲区,在操作系统觉得合适的时候才真的去写入。drain 就类似于等待文件的 flush 完成。
|
3
aladdindingding OP 仔细看了一下文档: https://docs.python.org/zh-cn/3.7/library/asyncio-stream.html#asyncio.StreamWriter.drain
await writer.drain() 当 socket 缓冲区达到上限时后阻塞,没达到上限时后就相当于 stream.write(data)立刻返回。相当于一个保护机制吧 |
4
aladdindingding OP @66beta 是滴!
|
5
dick20cm 2021-04-21 15:06:05 +08:00
writer.write 将数据 copy 到 buffer 并立即返回,writer.drain 实际执行 io 操作,因为 io 要切换时间片所以挂起当前协程,等带 sys 响应后再恢复现场
|
6
araraloren 2021-04-22 11:58:06 +08:00
如果你需要等待写入完成,你就必须 await 一下
|