【问题标题】:Flask API: How to clear database connection pool?Flask API:如何清除数据库连接池?
【发布时间】:2016-03-13 23:15:21
【问题描述】:

我这几天一直在努力解决这个问题,但似乎找不到任何解决方案。我正在尝试使用 Flask 框架创建一个 REST APIendpoint。问题是 API 会在一段时间内给出正确的结果,并且随着时间的流逝,它会停止接收任何请求。我不知道为什么它会突然这样做。我最好的猜测是它的数据库连接池没有被清除。正如您在下面的代码中看到的那样,我正在正确关闭数据库连接,但我仍然面临这个问题。请帮忙!

from flask import Flask, jsonify
from flask_restful import Resource, Api
from flask_restful import reqparse
from sqlalchemy import create_engine
from flask.ext.httpauth import HTTPBasicAuth
from flask.ext.cors import CORS

conn_string = "mssql+pyodbc://x"
e = create_engine(conn_string)

auth = HTTPBasicAuth()

@auth.get_password
def get_password(username):
    if username == 'x':
        return 'x'
    return None

app = Flask(__name__)
cors = CORS(app)
api = Api(app)

class Report(Resource):
    decorators = [auth.login_required]

    def get(self):
        parser = reqparse.RequestParser()
        parser.add_argument('start', type = str)
        parser.add_argument('end', type = str)
        args = parser.parse_args()

        conn = e.connect()

        stat = """
        select a, b from report where c < ? and d > ?
        """

        query = conn.execute(stat, [args['start'], args['end']])

        json_dict = []

        for i in query.cursor.fetchall():


            res = {'aa': i[0], 'bb':i[1]}
            json_dict.append(res)

        conn.close()
        return jsonify(results=json_dict)

api.add_resource(Report, '/report')

if __name__ == '__main__':
    app.run(host='0.0.0.0')

【问题讨论】:

  • 出于好奇,您是在某种服务器/共享主机上还是在本地运行它?如果是前者,在本地运行时是否有效?
  • 是的,我在服务器上运行它。不,即使我在本地运行它也不起作用。 API 只给我一天左右的结果,之后我必须一次又一次地重新启动 VM。

标签: python azure flask sqlalchemy flask-restful


【解决方案1】:

我根据你的代码构建了一个快速测试项目,连接Azure SQL数据库,查询一个简单的句子select * from (values (1), (2), (3), (4), (5)) numbers(number),在本地运行。并通过 node.js 每秒请求此 API 10 次。经过几个小时的测试,它仍然运行良好。甚至我也使用 NullPool 禁用了池,这在 SQLalchemy guide 上显示。

创建 SQLalchemy 连接引擎时可以尝试放大pool sizeset Pool Recycle。如果是 db 连接池问题。

但是根据我的测试结果,您可以监控您的应用以进行调试。 要调试本地运行的烧瓶应用程序,您可以利用logging 模块,请参阅http://flask.pocoo.org/docs/0.10/errorhandling/ 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 2010-10-23
    相关资源
    最近更新 更多