Python 3.4+Асинхронное программированиепонятие
asyncio.Transport
протоколы и транспорты
Двунаправленный транспорт asyncio: соединение, в которое можно и писать, и из которого читать. Объединяет ReadTransport и WriteTransport.
Синтаксис
transport.write(data); transport.close(); transport.abort(); transport.get_extra_info(name)
Транспорт не создают сами: его отдаёт цикл (loop.create_connection, create_server) или его можно достать из потока как writer.transport. Транспорт — это «как передать байты», а протокол — «что с ними делать»; данные приходят не возвратом из read(), а вызовом protocol.data_received(). close() дожидается отправки буфера, а abort() бросает его и рвёт соединение сразу; после close() is_closing() уже True, хотя сокет закроется на следующей итерации цикла.
Примеры
import asyncio
import socket
async def main():
a, b = socket.socketpair()
reader, writer = await asyncio.open_connection(sock=a)
t = writer.transport
print(isinstance(t, asyncio.Transport)) # → True
print(isinstance(t, asyncio.ReadTransport), isinstance(t, asyncio.WriteTransport)) # → True True
print(t.is_closing()) # → False
t.close()
print(t.is_closing()) # → True — закрытие уже начато
await asyncio.sleep(0.01)
b.close()
asyncio.run(main())
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности