Python 用于金字塔请求的线程安全SQLAlchemy会话

Python 用于金字塔请求的线程安全SQLAlchemy会话,python,sqlalchemy,thread-safety,pyramid,Python,Sqlalchemy,Thread Safety,Pyramid,文章演示了一种将SQLAlchemy DB会话通过以下方式附加到每个请求的好方法: def includeme(config): settings = config.get_settings() engine = engine_from_config(settings) maker = sessionmaker() register(maker) maker.configure(bind=engine) config.add_request_m

文章演示了一种将SQLAlchemy DB会话通过以下方式附加到每个请求的好方法:

def includeme(config):
    settings = config.get_settings()
    engine = engine_from_config(settings)

    maker = sessionmaker()
    register(maker)
    maker.configure(bind=engine)

    config.add_request_method(lambda request: maker(), 'db_session', reify=True)
这种方法的问题在于“在这种设计下,事务管理器仍然作为threadlocal提供”。知道怎么修吗?谢谢


得益于
pyramid_tm
包中的一些改进,您实际上可以完全删除threadlocal事务管理器。这是否是一个好主意取决于您。

这不仅仅是交易管理;这里还有会话上的线程本地约束。你看过了吗?谢谢!正如我所期待的,您能否详细说明“这是否是一个好主意取决于您”是否存在不希望避免线程局部变量的情况?可能有某些包希望线程局部变量可用,因为它是与
事务
包交互的默认方法(用于协调提交的
zope.sqlalchemy
pyramid_tm
等的底层包)。