【问题标题】:Flask-SQLAlchemy TimeoutErrorFlask-SQLAlchemy 超时错误
【发布时间】:2016-02-03 05:42:01
【问题描述】:

烧瓶 蟒蛇 2.7 Postgres 9 Ubuntu 14.04

我正在使用 Flask 和 SQLAlchemy,在 15 个连续的 HTTP 请求之后,我得到:

QueuePool 限制大小为 5 溢出 10,连接超时,超时 30

然后服务器停止响应:

非常相似:

Flask-SQLAlchemy TimeoutError

我没有会话引擎,根据我的理解 Flask-SQLAlchemy 应该处理它。 我需要配置什么来支持更多会话并定期清理现有会话。

app.py

import models
api_app = Flask(__name__)
api_app.config.from_pyfile(settings.celery_config)
db = SQLAlchemy(api_app)


@api_app.teardown_appcontext
def shutdown_session(exception=None):
    try:
        db.session.close()
    except AttributeError,e:
        print str(e)
    except Exception,e:
        print api_app.name
        print str(e)

@api_app.route('/api/1.0/job/<string:ref>/')
def get_job_by_id(ref):
    """

    :param id:
    :return:
    """
    try:
        if request.method == 'GET':
            job = models.Job.query.filter(models.Job.reference == ref)
            if job:
                job_ = job.all()
                if len(job_) == 1:
                    return jsonify(job_[0].serialize())

            resp = Response(status=404, mimetype='application/json')
            return resp            

        else:
            resp = Response(status=405, mimetype='application/json')
            return resp
    except Exception,e:
        print str(e)
        resp = Response(status=500, mimetype='application/json')
        return resp

models.py

from api_app import db
class Job(db.Model, AutoSerialize, Serializer):
    __tablename__ = 'job'
    __public__ = ('status','description','reference')
    id = Column(Integer, primary_key=True, server_default=text("nextval('job_id_seq'::regclass)"))
    status = Column(String(40), nullable=False)
    description = Column(String(200))
    reference = Column(String(50))

    def serialize(self):
        d = Serializer.serialize(self)
        del d['id']
        return d

【问题讨论】:

    标签: python postgresql flask flask-sqlalchemy


    【解决方案1】:

    基于@spicyramen 评论:

    增加SQLALCHEMY_POOL_SIZE数据库池的大小。

    【讨论】:

    • 试过db.session.remove(),重启App同样问题
    • 尝试设置值:pythonhosted.org/Flask-SQLAlchemy/config.html 现在可以使用:api_app.config['SQLALCHEMY_POOL_SIZE'] = 100
    • @spicyramen 我编辑我的帖子并添加您的评论。谢谢
    猜你喜欢
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2015-02-20
    • 2021-10-11
    • 2017-07-07
    • 2015-06-26
    相关资源
    最近更新 更多