aiohttp, судя по документации, поддерживает Gino - это orm, использующая драйвер asyncpg, основанная на sqlalchemy.
Сейчас эта orm-ка подключена простым импортом к моему бекенду:
from aiohttp import web
from gino import Gino
app = web.Application()
db = Gino()
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
fullname = db.Column(db.String)
async def main():
async with db.with_bind('postgresql://localhost/mydb') as engine:
await db.gino.create_all()
await User.create(name='jack', fullname='Jack Jones')
print(await User.query.gino.all())
asyncio.get_event_loop().run_until_complete(main())
# дальше идут вьюхи, роуты и т п - пока всё в одном файле, т.к. мне так удобнее осваивать.
# Позднее всё будет отсортировано по различным модулям
if __name__ == '__main__':
web.run_app(app)
Всё работает
Тут, на сколько я могу судить, запускается два event loop - один для самого aiohttp под капотом программы, а другой для Gino.
Однако в документации описана поддержка Gino из коробки:
from aiohttp import web
from gino.ext.aiohttp import Gino
db = Gino()
app = web.Application(middlewares=[db])
db.init_app(app)
Тогда будут работать middlewares (кстати пока не понял что даёт конкретно эта middlewares db)
Вопрос состоит из двух частей:
1) я пока не понял, правильно ли иметь как в первом коде два различных event loop'а? Они как-то распараллеливаются друг с другом? И если да, то как? Не будет ли один event loop блокировать второй по какой-то причине?
2) Если всё работает хорошо и так, что полезного может дать подключение Gino вторым вариантом?