Python 3.4+Асинхронное программированиефункция
asyncio.start_server()
потоки ввода-вывода
Запускает TCP-сервер: на каждое входящее соединение вызывает колбэк с парой (StreamReader, StreamWriter).
Синтаксис
server = await asyncio.start_server(client_connected_cb, host=None, port=None, *, limit=2**16, **kwds)
Сервер начинает принимать соединения сразу после await, а serve_forever() лишь держит программу. Если колбэк — корутина, каждый клиент получает свою задачу; исключение в ней не роняет сервер, а только пишется в лог, поэтому ошибки обработчика легко пропустить. port=0 просит у ОС свободный порт — настоящий берут из server.sockets[0].getsockname(). async with server закрывает сервер на выходе.
Примеры
import asyncio
async def handle(reader, writer):
data = await reader.read(100)
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]
print(host, port > 0) # → 127.0.0.1 True
async with server:
reader, writer = await asyncio.open_connection(host, port)
writer.write(b'abc')
print(await reader.read(100)) # → b'ABC'
writer.close()
await writer.wait_closed()
asyncio.run(main())
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности