Таким образом, я пишу еще одному Скрученному основанному демону. Это будет иметь интерфейс xmlrpc, как обычно, таким образом, я смогу легко общаться с ним и иметь другой, обрабатывает данные обмена с ним по мере необходимости.
Этот демон должен получить доступ к базе данных. Мы использовали Алхимию SQL вместо трудного кодирования строки SQL для наших последних проектов - главным образом сделанные для веб-приложений в Опорах.
Мы хотели бы сделать то же для этого приложения и кода библиотеки повторного использования, который использует Алхимию SQL. Таким образом, что сделать? Хорошо, конечно, так как та библиотека была записана для использования в приложении Опор, это - весь простой код стиля блокирования, к которому все приучены, и все неблокирование волшебно обрабатывается Опорами через поточную обработку, местных жителей потока, определил объем сессий и так далее.
Таким образом, теперь для Скрученного я предполагаю, что немного застреваю. Я мог:
Я также застреваю с помощью банкомата Python 2.5.4 так № 2.6 все же, и я не думаю, что могу просто сделать импорт от будущего для получения доступа к прохладному новому многопроцессорному материалу модуля там. Это в порядке, хотя я предполагаю, поскольку у нас есть контакт с межпроцессным взаимодействием вниз вполне прилично.
Таким образом, я склоняюсь к опции 4 главным образом, поскольку это избежало бы смертного греха логического дублирования с опцией 1, также оставаясь heck далеко от потоков.
Моя первая попытка, хотя будет опция 2 просто получить вещь движение и затем выделить вызовы к коду библиотеки, возможно, в отдельный процесс, если это будет похоже, существует хороший шанс, что что-то могло бы взять немного слишком долго для блокирования на. Печальный. Возможно, комбинация Stackless Python и Скрученный была бы интересна здесь.
Какие-либо лучшие идеи?
Во-первых, я, к сожалению, могу лишь согласиться с вашим мнением, которое искажено и SQLAlchemy не очень хорошо ладит. Я работал с обоими и будет несколько опасаться сложности, которая возникнет из-за соединяя их.
Все известные мне на сегодняшний день уровни интеграции баз данных используют Уровень интеграции twisteds threading, и если вы хотите избежать этого на все затраты вы в значительной степени застряли в пункте 4 в вашем списке.
С другой стороны, я видел примеры кода подключения к базе данных. используя deferToThread () и друзей, которые работали очень хорошо.
В любом случае, несколько указателей, если вы готовы рассмотреть другие фреймворки. чем SQLAlchemy:
Ребята из DivMod проделали некоторую предварительную работу над twisted - интеграция с базой данных на основе Storm ORM (google для "storm orm").
См. Пример по этой ссылке:
http://divmod.readthedocs.org/en/latest/products/nevow/storm-approach.html
Также перейдите на сайт DivMod и посмотрите у источников их слой Axiom db (вероятно, бесполезен для вас напрямую, так как это только Sqlite, но его принципы могут быть полезны).
На launchpad https://code.launchpad.net/~therve/storm/twisted-integration есть ветка storm, которую можно использовать с twisted напрямую (внутренне она делает defer to thread stuff). Я использовал его хорошо.
К сожалению, sqlalchemy значительно сложнее в реализации для аудита асинхронного использования. Если вы действительно хотите его использовать, я бы рекомендовал использовать внепроцессный подход с уровнем rpc для хранения данных.
В качестве альтернативы, если вы чувствуете себя авантюристом и используете postgresql, последняя версия pyscopg2 поддерживает истинное использование async (https://launchpad.net/txpostgres), а исходники storm довольно просто взломать ;-)
Кстати, в storm, который вы пробовали в прошлом году, по умолчанию не было включено C-расширение (сейчас оно есть в последних релизах), что может объяснить ваши проблемы со скоростью.