Python Glossary English

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