我的代码首先尝试创建引擎:
def createEngine(connectionstring):
engine = create_engine(connectionstring,
#pool_size = DEFAULT_POOL_SIZE,
#max_overflow = DEFAULT_MAX_OVERFLOW,
echo = False)
return engine
然后从引擎获取会话:
@contextmanager
def getOrmSession(engine):
try:
Session.configure(bind=engine)
session = Session()
yield session
finally:
pass
客户端代码如下:
def composeItems(keyword, itemList):
with getOrmSession(engine) as session:
for i in itemList:
item = QueryItem(query=keyword,
......
active = 0)
session.add(item)
session.commit()
然后当我在gevent spawn中调用composeItems时。显然,mysql死锁。发生了什么事?上述用法有什么问题?
答案 0 :(得分:1)
自己找答案。
我需要在导入gevent时修补线程。所以scoped_session将能够使用greenlet的本地线程。改变补丁,现在一切正常。