Обновить
17
0
Andrey Popp@bsdemon

Пользователь

Отправить сообщение
Если честно, то цифры в бенчмарке несколько странные.
> Что неправильно:
> 1. libevent (надо было libev)

На самом деле все бенчмарки libev относительно libevent очень стары, никто не делал сравнений с новыми версиями. Libevent более распространён (memcached, chromium, ...) и более стабилен, к тому же там есть httpd, httpc, асинхронный револьвер DNS. Я бы не сказал libev более уместен тут.

> 2. Отсутствует возможность патчить socket и прочие модули, чтобы работал
> нормальный синхронный код. Это есть в eventlet.

Такая возможность есть — модуль gevent.monkey.
Насчёт python и неблокирующего нетворкинга смотрим на gevent.org — почти идеальное решение ;-).
Plone, написан на Python. Zotonic, написан на Erlang.
Создатель gevent, Денис Биленко. Если возьмётесь на портирование gevent на Stackless, там также будет участвовать, как ментор, Richard Tew.
Ну просто, тогда не надо делать пункты от 1 до 4 :-).
Почему нельзя разработчику запускать проекты на localhost:8080 и т. д.?
Да извиняюсь, кооперативная, спасибо что поправили.
Переключение между greenlet'ами намного быстрее чем между процессами и даже потоками Windows/UNIX.
Вы, видимо, уже сравниваете prefork на Windows и prefork на Unix :-).
Так мы же говорим о greenlet'ах, причём тут процессы?
> Мое мнение — на Win32 и Apache на процессах возможно имеет смысл, на UNIX/LINUX выигрыш должен быть небольшим.
А какая разница?

> Но надо учитывать, что будет проигрыш в надежности.
Тоже непонятно откуда такой вывод.
Есть же мультиплексоры ввода-вывода, такие как select, epoll, kqueue, с помощью них во время ожидания на I/O, можно выполнять другой код.

Greenlet же это userspace поток, то есть вычисление, которое можно «заморозить», а потом продолжить. С помощью них реализуется вытесняющая многозадачность. Таким образом, в одном OS-процессе мы имеем несеолько greenlet'ов, по одному на каждый запрос например, во время ожидания одного greenlet'а на I/O, какой-то другой greenlet можеть продолжать выполнение, обслуживая другого пользователя.
Тут как раз предлагается вариант, когда усложнений в коде не появляется.
Django я не пробовал так запускать, потому что не использую его, но вот SQLAlchemy прекрасно работает таким образом в неблокирующем стиле.
Вам следует посмотреть на gevent/eventlet (оба используют greenlet). Они могут действовать следующим образом — производится замена стандартного модуля socket на неблокирующий (monkey-patching), и соответственно все библиотеки, которые используют python-сокеты становятся неблокирующими (к сожалению или к счастью к ним НЕ относится ни python-mysql ни psycopg2, но есть mysql-connector и pg8000).
Шаблонизатор много у вас делает I/O? :) Не несите чушь :-).
Потребуется меньше усилий, особенно при использовании библиотек с корутинами.
Twisted обращается к БД в отдельном потоке, то есть основной поток не блокируется. gevent/eventlet патчит модуль socket стандартной библиотеки Python и делает их неблокирующими, так что любая библиотека, которая использует python-сокеты автоматически становится неблокирующей. Последнее касается и драйверов БД.

Признайте уже, что облажались с примером на Python :-).

Информация

В рейтинге
Не участвует
Откуда
Россия
Дата рождения
Зарегистрирован
Активность