Python Glossary English

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

asyncio.Server

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

Объект запущенного сервера, который возвращают asyncio.start_server() и loop.create_server(): принимает соединения, закрывается close() и wait_closed().

Синтаксис

server = await asyncio.start_server(handler, host, port)
async with server: await server.serve_forever()

Сервер начинает принимать соединения сразу после start_server(), а serve_forever() лишь держит корутину, пока сервер не закроют; без await программа просто дойдёт до конца asyncio.run() и сервер умрёт. Порт 0 просит ОС выбрать свободный — узнать его можно через server.sockets[0].getsockname(). Под именем asyncio.Server класс доступен с 3.11 (и с 3.9.11/3.10.3); создавать его руками нельзя.

Примеры

import asyncio
async def handle(reader, writer):
    data = await reader.readline()
    writer.write(data.upper())
    await writer.drain()
    writer.close()
async def main():
    server = await asyncio.start_server(handle, '127.0.0.1', 0)  # только локальный адрес
    host, port = server.sockets[0].getsockname()[:2]
    async with server:
        reader, writer = await asyncio.open_connection(host, port)
        writer.write(b'ping\n')
        print(await reader.readline())  # → b'PING\n'
        writer.close()
        await writer.wait_closed()
    print(type(server).__name__, server.is_serving())  # → Server False
    await asyncio.sleep(0.01)
asyncio.run(main())

См. также

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