Python 3.4+Асинхронное программированиепонятие
asyncio.ReadTransport
протоколы и транспорты
Интерфейс транспорта, из которого читают: pause_reading(), resume_reading() и is_reading() управляют потоком данных в data_received().
Синтаксис
transport.pause_reading(); transport.resume_reading(); transport.is_reading()
Учащемуся этот уровень обычно не нужен: для TCP есть потоки asyncio.open_connection() и asyncio.start_server(), для процессов — asyncio.create_subprocess_exec(). pause_reading() — ручное противодавление: если протокол не успевает обработать входящие данные, чтение из сокета приостанавливают, иначе они копятся в памяти. В потоках StreamReader делает это сам, когда его буфер переполнен (параметр limit). Повторный вызов pause_reading() или resume_reading() безопасен — с 3.7 он ничего не делает.
Примеры
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.ReadTransport)) # → True
transport.pause_reading()
print(transport.is_reading()) # → False
transport.resume_reading()
print(transport.is_reading()) # → True
transport.close()
await asyncio.sleep(0.01)
right.close()
asyncio.run(main())
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности