SQLAlchemy与gevent和mysql

时间:2017-04-18 08:59:56

标签: mysql sqlalchemy gunicorn gevent

关于这个问题,我找不到任何“最佳做法”。

在并发gevent环境中使用SQLAlchemy的最佳方法是什么?

我使用gunicorn(带-k gevent标志)运行一个烧瓶应用程序。 这是一次初始化数据库引擎的代码:

from gevent import monkey
monkey.patch_all()
orm_engine = create_engine('mysql+mysqldb://user:pass@127.0.0.1/mydb',
                           pool_size=10, strategy='threadlocal')
SessionFactory = scoped_session(sessionmaker(bind=orm_engine))

这是每个请求的代码:

log.info("Entering")
session = SessionFactory()
my_obj = session.query(MyObj).get(request['obj_id'])
my_obj.some_property += 1
session.add(my_obj)
session.commit()
session.close()
log.info("Exiting")

即使在运行数十个concurent请求时,打印的日志也始终显示“进入,退出,进入,退出......”。绝不“进入,进入,退出,退出”。意味着每个请求的gevent线程在I / O上被阻塞,等待查询从DB返回,但不会切换到其他等待的gthread。

我做错了吗?

0 个答案:

没有答案