⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 threaded_compile.py

📁 SQLAlchemy. 经典的Python ORM框架。学习必看。
💻 PY
字号:
"""test that mapper compilation is threadsafe, includingwhen additional mappers are created while the existingcollection is being compiled."""import testenv; testenv.simple_setup()from sqlalchemy import *from sqlalchemy.orm import *import thread, timefrom sqlalchemy.orm import mapperlibmeta = MetaData('sqlite:///foo.db')t1 = Table('t1', meta,    Column('c1', Integer, primary_key=True),    Column('c2', String(30))    )t2 = Table('t2', meta,    Column('c1', Integer, primary_key=True),    Column('c2', String(30)),    Column('t1c1', None, ForeignKey('t1.c1')))t3 = Table('t3', meta,    Column('c1', Integer, primary_key=True),    Column('c2', String(30)),)meta.create_all()class T1(object):    passclass T2(object):    passclass FakeLock(object):    def acquire(self):pass    def release(self):pass# uncomment this to disable the mutex in mapper compilation;# should produce thread collisions#mapperlib._COMPILE_MUTEX = FakeLock()def run1():    for i in range(50):        print "T1", thread.get_ident()        class_mapper(T1)        time.sleep(.05)def run2():    for i in range(50):        print "T2", thread.get_ident()        class_mapper(T2)        time.sleep(.057)def run3():    for i in range(50):        def foo():            print "FOO", thread.get_ident()            class Foo(object):pass            mapper(Foo, t3)            class_mapper(Foo).compile()        foo()        time.sleep(.05)mapper(T1, t1, properties={'t2':relation(T2, backref="t1")})mapper(T2, t2)print "START"for j in range(0, 5):    thread.start_new_thread(run1, ())    thread.start_new_thread(run2, ())    thread.start_new_thread(run3, ())    thread.start_new_thread(run3, ())    thread.start_new_thread(run3, ())print "WAIT"time.sleep(5)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -