Итак, я пишу еще один демон на основе Twisted.Он будет иметь интерфейс xmlrpc, как обычно, поэтому я могу легко общаться с ним, и другие процессы будут обмениваться данными с ним по мере необходимости.
Этот демон должен иметь доступ к базе данных.Мы использовали SQL Alchemy вместо жесткого кодирования строк SQL для наших последних проектов - в основном для веб-приложений в Pylons.
Мы хотели бы сделать то же самое для этого приложения и повторно использовать библиотекукод, который использует SQL Alchemy.Так что делать?Ну, разумеется, поскольку эта библиотека была написана для использования в приложении Pylons, это весь простой код стиля блокировки, к которому все привыкли, и вся неблокировка волшебным образом обрабатывается Pylons посредством потоков, локальных потоков, сессий с областями видимости и т. Д.на.
Так что теперь для Twisted я думаю, я немного застрял.Я мог бы:
- Просто напишите нужный мне sql напрямую, если он минимальный, и использовать пул dbapi в витой для выполнения runInteractions и т. Д., Когда мне нужно нажать на db.
- Использовать объектыи, по сути, блокирует методы в нашей библиотеке и блокирует то и дело в моем Twisted демоне.Бах.
- Используйте sAsync, который последний раз обновлялся в 2008 году, и снова используйте модели, которые мы уже определили, но не совсем, и это не означает, что код библиотеки должен работать и в Pylons.Это работает даже с последней версией Алхимии SQL?Кто знает.Однако этот проект выглядел великолепно - почему он был заброшен?
- Создает отдельный подпроцесс и заставляет его работать с кодом библиотеки и всеми его блокировками, результаты возвращаются обратно моему демону, когда все готово, как объекты маршалируются через YAML через xmlrpc.
- Используйте deferToThread изатем удалите возвращенные объекты, убедившись в том, что я загружаю их так, чтобы у меня были все мои вещи, которые мне могут понадобиться.Мне это кажется ужасным.
Я также застрял с использованием Python 2.5.4 atm, так что пока нет 2.6, и я не думаю, что могу просто выполнить импорт из будущего, чтобы получить доступ ктам есть классный новый многопроцессорный модуль.Это нормально, хотя я полагаю, что у нас довольно неплохо работает межпроцессное взаимодействие.
Так что я склоняюсь в основном к варианту 4, так как это позволит избежать смертельного греха логического дублирования с вариантом 1, оставаясь при этомчерт возьми от темы.
Хотя моей первой попыткой будет вариант 2, просто начать работу, а затем разделить вызовы библиотечного кода, возможно, в отдельный процесс, если кажется, что есть хороший шанс, что что-то может занять немногодолго блокировать.Печальный.Может быть, здесь было бы интересно сочетание Stackless Python и Twisted.
Есть идеи получше?