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