2015-11-03 120 views
1

瓶 的Python 2.7 的Postgres 9 的Ubuntu 14.04燒瓶SQLAlchemy的TimeoutError

我使用的瓶和SQLAlchemy的,經過連續15個HTTP請求,我得到:

大小5溢流槽10的QueuePool達到上限,連接超時,超時30

然後服務器停止響應:

非常類似:

Flask-SQLAlchemy TimeoutError

我沒有會話引擎,按我的理解瓶-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 

回答

1

基於@spicyramen評論:

增加SQLALCHEMY_POOL_SIZE數據庫池的大小。

+0

嘗試了db.session.remove(),重啓應用相同的問題 – spicyramen

+1

嘗試設置值:https://pythonhosted.org/Flask-SQLAlchemy/config.html,現在工作:api_app.config ['SQLALCHEMY_POOL_SIZE'] = 100 – spicyramen

+0

@spicyramen我編輯我的文章並添加您的評論。謝謝 –