все Python 3до 3.12Удалено из стандартной библиотекипонятие
asyncore
удалённые модули
Модуль асинхронных сокетов на базе select() с классом dispatcher. Удалён в Python 3.12 — используйте asyncio.
Синтаксис
import asyncore # до 3.12
asyncore — основа старой событийной сети на select(): наследник asyncore.dispatcher переопределял handle_read() и handle_write(), а asyncore.loop() крутил цикл. Его вытеснил asyncio, поэтому модуль объявили устаревшим в Python 3.6 и по PEP 594 убрали в 3.12. Как переписать: вместо dispatcher и loop() напишите корутину-обработчик с StreamReader и StreamWriter, сервер поднимите через asyncio.start_server(), клиент — через asyncio.open_connection(), запуск — asyncio.run(). Пакет pyasyncore на PyPI возвращает старый модуль, но новый код пишите на asyncio.
Примеры
# Python 3.12+
try:
import asyncore
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)
writer.write(b'ping')
await writer.drain()
data = await peer_reader.read(4)
print(data) # → b'ping'
writer.close()
peer_writer.close()
asyncio.run(main())
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности