Python Glossary English

все Python 3до 3.12Удалено из стандартной библиотекипонятие

asynchat

удалённые модули

Надстройка над asyncore для протоколов «команда — ответ» с разбором по разделителю. Удалён в Python 3.12 — используйте потоки asyncio.

Синтаксис

import asynchat  # до 3.12

asynchat.async_chat копил входящие байты и вызывал found_terminator(), когда встречал заданный разделитель, например b'\r\n', — так писали серверы строковых протоколов. Модуль жил поверх asyncore и ушёл вместе с ним: устарел в Python 3.6, по PEP 594 удалён в 3.12. Как переписать: set_terminator() и collect_incoming_data() заменяет одна строка line = await reader.readuntil(b'\r\n'); ответ — writer.write(...) и await writer.drain(). Соединения дают asyncio.start_server() и asyncio.open_connection(). Пакет pyasynchat на PyPI возвращает модуль, но рекомендуем asyncio.

Примеры

# Python 3.12+
try:
    import asynchat
except ModuleNotFoundError as e:
    print(type(e).__name__)  # → ModuleNotFoundError
# Python 3.12+
import asyncio, socket
async def main():
    a, b = socket.socketpair()
    reader, writer = await asyncio.open_connection(sock=a)
    peer_reader, peer_writer = await asyncio.open_connection(sock=b)
    peer_writer.write(b'HELLO\r\nBYE\r\n')
    await peer_writer.drain()
    print(await reader.readuntil(b'\r\n'))  # → b'HELLO\r\n'
    print(await reader.readuntil(b'\r\n'))  # → b'BYE\r\n'
    writer.close()
    peer_writer.close()
asyncio.run(main())

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности