我正在从 SQLAlchemy 迁移到 SQLAlchemy[async],使用 postgresql 作为我的数据库。我正在关注 SQL Alchemy 文档https://docs.sqlalchemy.org/en/14/_modules/examples/asyncio/async_orm.html
对代码进行所有更改后,我的测试变得非常慢
我添加了一堆日志以便打印丢失时间的位置。我也进行了分析,但 cProfile 没有显示任何相关内容。
仅在插入后我才在代码中出现这种延迟。在我分享的测试中,我先执行插入,然后执行检索,并且它仅在会话与操作一起使用后发生add。
engine = create_async_engine(DATABASE_URL,
pool_size=20,
max_overflow=2,
pool_recycle=300,
pool_pre_ping=True,
pool_use_lifo=True)
async_session = sessionmaker(engine, expire_on_commit=False, class_=AsyncSession)
@asynccontextmanager
async def session_scope() -> AsyncSession:
"""
Context manager for API DB Sessions
"""
try:
async with async_session() as session:
await session.begin()
logger.info('Yielding session')
yield session
logger.info('Returned session')
logger.info('Pre commit')
await session.commit()
logger.info('Commit finished')
except Exception as exc: # pylint: disable=W0703
logger.exception('Exception on session')
await session.rollback()
raise exc
Run Code Online (Sandbox Code Playgroud)
这是我的客户
async …Run Code Online (Sandbox Code Playgroud) 我有来自不同应用程序的多个生产者向 RabbitMQ 中的主题发送消息。来自不同应用程序的多个消费者正在阅读这些主题。这个简单的架构作为 PoC 已经完美运行。但现在我有来自这些应用程序的多个实例,并且我不希望应用程序 X 实例 1 读取与应用程序 X 实例 2 相同的消息。但是应用程序 X 和应用程序 Y(及其所有实例)需要从同一主题变为红色。
我知道如果消费者共享相同的消费者 ID,Karaf 会平衡主题消息的消耗。RabbitMQ中有这个功能吗?我一直在阅读文档,但没有找到这样的内容。