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