Python Glossary English

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

asyncio.StreamWriter

потоки ввода-вывода

Пишущая половина асинхронного соединения: write() кладёт байты в буфер, drain() ждёт, пока буфер освободится, close() и wait_closed() закрывают соединение.

Синтаксис

writer.write(data); await writer.drain(); writer.close(); await writer.wait_closed()

write() — обычный метод, не корутина: он ничего не отправляет сразу, а копит байты, и без await writer.drain() быстрый писатель раздует память. Принимает только bytes — строку надо закодировать, иначе TypeError. close() тоже не ждёт: чтобы соединение действительно закрылось, после него пишут await writer.wait_closed().

Примеры

import asyncio
import socket
async def main():
    left, right = socket.socketpair()
    reader, writer = await asyncio.open_connection(sock=left)
    writer.write('привет\n'.encode())
    await writer.drain()
    await asyncio.sleep(0.01)
    print(right.recv(100).decode())  # → привет
    try:
        writer.write('строка')
    except TypeError:
        print('нужны bytes')  # → нужны bytes
    writer.close()
    await writer.wait_closed()
    right.close()
asyncio.run(main())

См. также

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