SQLAlchemy自动加载线程安全吗?

时间:2015-10-23 14:57:25

标签: python sqlalchemy

自动加载线程安全吗?我找不到任何关于此的文件。 通过以下代码,在大约前20ms内无法成功加载表(没有异常,没有警告或更高的日志,但table.columns是一个空列表),然后正常工作

from sqlalchemy import *
import logging
import threading
import time

logging.basicConfig(level = logging.INFO, format = '%(asctime)s:%(message)s', filename = "autoload_test.log")
logging.getLogger("sqlalchemy").setLevel(logging.DEBUG)
engine = create_engine("postgresql://madk@localhost/mydb", echo = False)
metadata = MetaData(bind=engine)

lock = threading.Lock()
def load_table():
    while True:
        try:
            table = Table('mytbl', metadata, autoload=True, autoload_with=engine)
            logging.info("size of columns:[%s]", len(table.columns))
        except:
            logging.warn("error occured", exc_info = True)

for i in range(5):
    t = threading.Thread(target = load_table)
    t.daemon = False
    t.start()

time.sleep(4)
  1. 1个主题:成功加载
  2. 多线程没有锁保护:所有线程都加载了 在最初的20ms失败(空列),然后所有线程都工作 适当
  3. 带有锁保护的多线程:添加线程加载 成功

0 个答案:

没有答案