Python 3.4+Асинхронное программированиефункция
asyncio.open_connection()
потоки ввода-вывода
Открывает TCP-соединение и возвращает пару (StreamReader, StreamWriter) для чтения и записи байтов через await.
Синтаксис
reader, writer = await asyncio.open_connection(host=None, port=None, *, limit=2**16, ssl=None, sock=None, **kwds)
writer.write() не корутина: байты уходят в буфер, и только await writer.drain() дожидается, пока буфер освободится — без него быстрый отправитель раздувает память. reader.readline() на закрытом соединении возвращает b'', а не бросает исключение, поэтому цикл чтения проверяет пустой ответ. Закрывают парой writer.close() и await writer.wait_closed(). Работает и с готовым сокетом через sock=.
Примеры
import asyncio
async def echo(reader, writer):
writer.write(await reader.readline())
await writer.drain()
writer.close()
async def main():
server = await asyncio.start_server(echo, '127.0.0.1', 0)
port = server.sockets[0].getsockname()[1]
async with server:
reader, writer = await asyncio.open_connection('127.0.0.1', port)
writer.write(b'hello\n')
await writer.drain()
print(await reader.readline()) # → b'hello\n'
print(await reader.readline()) # → b'' — соединение закрыто, не исключение
writer.close()
await writer.wait_closed()
asyncio.run(main())
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности