Python 3.4+Асинхронное программированиепонятие
asyncio.BaseTransport
протоколы и транспорты
Базовый класс транспортов — объектов, которые asyncio даёт протоколу для работы с сокетом, каналом или процессом: close(), is_closing(), get_extra_info().
Синтаксис
transport.get_extra_info(name, default=None); transport.close(); transport.is_closing()
Учащемуся этот уровень обычно не нужен: для TCP есть потоки asyncio.open_connection() и asyncio.start_server(), для процессов — asyncio.create_subprocess_exec(). Транспорт сами не создают: его возвращают loop.create_connection() и соседние методы, а протокол получает его в connection_made(). close() не закрывает немедленно — буфер записи дописывается асинхронно, а connection_lost() придёт позже. get_extra_info('peername') или 'socket' — способ узнать адрес собеседника и достать низкоуровневый объект; у StreamWriter есть тот же метод.
Примеры
import asyncio
import socket
async def main():
loop = asyncio.get_running_loop()
left, right = socket.socketpair()
transport, proto = await loop.create_connection(asyncio.Protocol, sock=left)
print(isinstance(transport, asyncio.BaseTransport)) # → True
print(transport.get_extra_info('socket') is not None) # → True
transport.close()
print(transport.is_closing()) # → True
await asyncio.sleep(0.01)
right.close()
asyncio.run(main())
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности