Python Glossary English

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