이 질문에 몇 번 질문했지만 나는 스레딩을 사용하여 scoped_session
의 사용법에 대해 여전히 확신 할 수 없다는 것을 알고 있습니다. 기본적으로 10 개의 작업자 스레드가있는 응용 프로그램이 있습니다. 하나의 Engine
은 연결 풀 크기가 11입니다. 각 스레드는 고유 한 세션을 가지고 있으며 스레드의 세션간에 정보를 공유 할 필요가 없습니다 (가능하다면 해결할 수 있지만 해결 방법을 만들었습니다). 마지막으로 복잡한 SQL 문에 대해 SQLAlchemy Core를 주 스레드에서 사용하고 있습니다. 따라서 연결 풀에 11 개의 스레드가 있습니다. 내가 MySQL과를 사용하고스레딩 및 SQLAlchemy 세션
내 pool_recycle
가 나는 점점 오류가 계속 3600로 설정 : 심지어 어떤 pool_recycle
설정하지 않고, 하나 개의 작업자 스레드를했을 때 일어난 적이없는이
(OperationalError) (2013, 'Lost connection to MySQL server during query')
. 나는 MySQL과 SQLAlchemy에 대해 아주 기본적인 지식을 가지고 있기 때문에, SQLAlchemy 나 MySQL을 사용했을 때의 문제 (또는 위의 것 중 어느 것도 해당하지 않음)가 확실하지는 않습니다.
이common = Common()
class Common(object):
def __init__(self):
...
self.engine = create_engine(
'%(type)s://%(username)s:%(password)[email protected]%(endpoint)s:%(port)s/%(name)s?charset=utf8' % {
'type': config.get('db_type'),
'username': 'foo',
'password': 'bar',
'endpoint': config.get('db_endpoint'),
'port': str(config.get('db_port')),
'name': config.get('db_name'),
},
encoding='utf-8',
pool_size=config.get('num_workers') + 1,
pool_recycle=3600,
)
self.session = sessionmaker(bind=self.engine)
각 노동자가 self.session = common.session()
를 호출을 통해이 세션을 사용
여기 내 설정입니다.
[쿼리 동안 MySQL 서버에 연결이 끊어]의 가능한 중복 (http://stackoverflow.com/questions/1884859/lost-connection-to-mysql-server-during-query) – SingleNegationElimination
어디 있어요 여기에'scoped_session'이 사용 되었습니까? 아마도'self.session = scoped_session (sessionmaker (bind = self.engine))'을 시도한 후 다음을 수행하십시오 :'self.session(); self.session.query ....; self.session.remove()' – jaor