Python Glossary English

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