Python Glossary English

Python 3.4+Асинхронное программированиепонятие

asyncio.WriteTransport

протоколы и транспорты

Транспорт только для записи: write() кладёт байты в буфер и возвращается сразу, а водяные знаки буфера управляют обратным давлением.

Синтаксис

transport.write(data); transport.writelines(list_of_data); transport.set_write_buffer_limits(high=None, low=None)

write() не корутина и ничего не ждёт: если получатель медленный, буфер растёт без предела, пока протокол не начнёт слушать pause_writing()/resume_writing(). Пороги задаёт set_write_buffer_limits(high, low), по умолчанию это 64 КиБ и 16 КиБ. В потоках ту же задачу решает await writer.drain() — именно поэтому его нельзя пропускать в цикле записи. write_eof() закрывает только запись, если can_write_eof() истинно.

Примеры

import asyncio
import socket
async def main():
    a, b = socket.socketpair()
    reader, writer = await asyncio.open_connection(sock=a)
    t = writer.transport
    print(t.get_write_buffer_limits())  # → (16384, 65536) — (low, high)
    t.write(b'ping')  # без await: байты ушли в буфер
    print(t.can_write_eof())  # → True
    await asyncio.sleep(0.01)
    print(b.recv(10))  # → b'ping'
    t.close()
    await asyncio.sleep(0.01)
    b.close()
asyncio.run(main())

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности