tgoop.com/zen_of_python/4053
Create:
Last Update:
Last Update:
Вопрос подписчика
Задает @AlekseiKiselev:
«А вопрос то и назрел, как по правильному делать асинхронный скоуп в алхимии.... На ум пришел синглтон, но не понятно будет-ли течь память, так как закрытие сессии явно приводит к открытию новой, а это дико медленно, поэтому сессию закрывать крайне не охота. Может есть какие-то бест практис?
Пример, что может пойти не так?
class Db:
session: async_scoped_session
def __new__(cls, config: RelationDatabaseConfig):
if not hasattr(cls, 'instance'):
cls.instance = super(Db, cls).__new__(cls)
return cls.instance
def __init__(self, config: RelationDatabaseConfig):
# Создаем коннект к БД
self._async_engine = create_async_engine(
config.connection_string,
echo=False,
pool_pre_ping=True,
poolclass=NullPool
)
# Создаем фабрику для создания сессии
self._async_session_factory = async_sessionmaker(
self._async_engine,
expire_on_commit=False,
)
# Создаем сессию на основе фабрики
self.session = async_scoped_session(
self._async_session_factory,
scopefunc=asyncio.current_task
)
Пожалуйста, будьте взаимовежливы. Однажды и вам помогут в этой рубрике.
#обсуждение
@zen_of_python
BY Zen of Python

Share with your friend now:
tgoop.com/zen_of_python/4053