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Сообщить о неточности