> Что неправильно:
> 1. libevent (надо было libev)
На самом деле все бенчмарки libev относительно libevent очень стары, никто не делал сравнений с новыми версиями. Libevent более распространён (memcached, chromium, ...) и более стабилен, к тому же там есть httpd, httpc, асинхронный револьвер DNS. Я бы не сказал libev более уместен тут.
> 2. Отсутствует возможность патчить socket и прочие модули, чтобы работал
> нормальный синхронный код. Это есть в eventlet.
Есть же мультиплексоры ввода-вывода, такие как select, epoll, kqueue, с помощью них во время ожидания на I/O, можно выполнять другой код.
Greenlet же это userspace поток, то есть вычисление, которое можно «заморозить», а потом продолжить. С помощью них реализуется вытесняющая многозадачность. Таким образом, в одном OS-процессе мы имеем несеолько greenlet'ов, по одному на каждый запрос например, во время ожидания одного greenlet'а на I/O, какой-то другой greenlet можеть продолжать выполнение, обслуживая другого пользователя.
Вам следует посмотреть на gevent/eventlet (оба используют greenlet). Они могут действовать следующим образом — производится замена стандартного модуля socket на неблокирующий (monkey-patching), и соответственно все библиотеки, которые используют python-сокеты становятся неблокирующими (к сожалению или к счастью к ним НЕ относится ни python-mysql ни psycopg2, но есть mysql-connector и pg8000).
Twisted обращается к БД в отдельном потоке, то есть основной поток не блокируется. gevent/eventlet патчит модуль socket стандартной библиотеки Python и делает их неблокирующими, так что любая библиотека, которая использует python-сокеты автоматически становится неблокирующей. Последнее касается и драйверов БД.
Признайте уже, что облажались с примером на Python :-).
> 1. libevent (надо было libev)
На самом деле все бенчмарки libev относительно libevent очень стары, никто не делал сравнений с новыми версиями. Libevent более распространён (memcached, chromium, ...) и более стабилен, к тому же там есть httpd, httpc, асинхронный револьвер DNS. Я бы не сказал libev более уместен тут.
> 2. Отсутствует возможность патчить socket и прочие модули, чтобы работал
> нормальный синхронный код. Это есть в eventlet.
Такая возможность есть — модуль gevent.monkey.
А какая разница?
> Но надо учитывать, что будет проигрыш в надежности.
Тоже непонятно откуда такой вывод.
Greenlet же это userspace поток, то есть вычисление, которое можно «заморозить», а потом продолжить. С помощью них реализуется вытесняющая многозадачность. Таким образом, в одном OS-процессе мы имеем несеолько greenlet'ов, по одному на каждый запрос например, во время ожидания одного greenlet'а на I/O, какой-то другой greenlet можеть продолжать выполнение, обслуживая другого пользователя.
Признайте уже, что облажались с примером на Python :-).