Использование eventlet с SQLAlchemy
Я использую eventlet для создания простого сканера веб-сайтов, начиная с этого примера. Я хотел бы использовать SQLAlchemy для хранения содержимого веб-страниц и метаданных для дальнейшей обработки. Можно ли использовать SQLAlchemy вместе с eventlet? Кто-нибудь может привести простой пример?
2 ответа
Решение
Извините за поздний ответ.
Это будет зависеть от используемой вами библиотеки подключений к базе данных.
- Для библиотеки расширений C, как и MySQLdb, в Eventlet есть модуль db_pool, как в примере с OpenStack. По сути, он создает пул потоков ОС для выполнения блокирующих операций с БД. Таким образом, у вас не может быть много параллельных запросов, но, скорее всего, ваша база данных не выдержит их, так что это не проблема.
- Для чистой библиотеки Python, такой как myconnpy, pg8000, просто позвоните
eventlet.monkey_patch()
, - В особом случае Eventlet поддерживает патчирование обезьян для psycopg2. Это расширение C, но оно достаточно круто для обеспечения перехватов ввода-вывода, так что вы получаете лучшее из обоих миров. Опять же, простой вызов
monkey_patch()
сделал бы трюк.
Проект OpenStack Compute (Nova) использует SQLAlchemy и eventlet, вас может заинтересовать их подход.