[BangPypers] [SQLAlchemy R&D] Working of Session in thread
Saju M
sajuptpm at gmail.com
Thu Oct 10 17:25:56 CEST 2013
Could someone please explain, Howto sqlalchemy creating new Session and
connection inside the thread.
Please check the attached programme and output.
I went through the doc
http://docs.sqlalchemy.org/en/latest/orm/session.html#thread-local-scope
and find that sqlalchemy using "threading.local()" to do this magic, but I
could not seen any thing in "threading.local()" (see output of the
programme)
*####### Test Code and Output #######*
from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
e = create_engine("mysql://root:xxxxx@localhost/xxxxx")
Session = scoped_session(sessionmaker(e))
import threading
from functools import wraps
def find_connection_id_deco(func):
"""
"""
@wraps(func)
def wrap1(*args, **kwargs):
"""
"""
gls = func.__globals__
_DBSession = gls.get("Session")
if _DBSession:
res1 = _DBSession.connection().execute("SELECT connection_id()")
if res1:
conn_id = res1.fetchone()[0]
print "@@@@%s===%s()===conn_id_1===%s===%s===%s===%s===" \
%(func.func_code.co_filename, func.__name__, conn_id,
vars(threading.local()),\
threading.currentThread().getName(),
threading.currentThread().ident)
return func(*args, **kwargs)
return wrap1
@find_connection_id_deco
def test1():
"""
"""
print "test1"
@find_connection_id_deco
def test2():
"""
"""
print "test2"
from threading import Thread
test1()
thread = Thread(target=test2)
thread.start()
*OUTPUT
#######*
@@@@cvt_test_script.py===test1()===conn_id_1===661==={}===MainThread===139917239523072===
test1
@@@@cvt_test_script.py===test2()===conn_id_1===662==={}===Thread-1===139917193123584===
test2
Regards
Saju Madhavan
+91 09535134654
More information about the BangPypers
mailing list