Люди, которые хотят сейчас написать асинхронный код на Python, имеют несколько вариантов:
- asyncore и asynchat;
- что-то сделанное на заказ, скорее всего, на основе модуля select;
- с использованием сторонней библиотеки, такой как Twisted или gevent .
К сожалению, у каждого из этих вариантов есть свои недостатки, которые пытается решить этот PEP.
Несмотря на то, что модуль asyncore долгое время был частью стандартной библиотеки Python, он страдает фундаментальными недостатками, вытекающими из негибкого API, который не соответствует ожиданиям современного модуля асинхронной сети.
Более того, его подход слишком упрощен, чтобы предоставить разработчикам все инструменты, которые им необходимы, чтобы полностью использовать потенциал асинхронных сетей.
Наиболее популярное решение, которое сейчас используется в производстве, включает использование сторонних библиотек. Они часто обеспечивают удовлетворительные решения, но между этими библиотеками отсутствует совместимость, что приводит к тому, что кодовые базы очень тесно связаны с используемой библиотекой.
Этот текущий недостаток переносимости между различными библиотеками асинхронного ввода-вывода вызывает много дублирующих усилий для сторонних разработчиков библиотек. Достаточно мощная абстракция может означать, что асинхронный код пишется один раз, но используется везде.