teardown_request() 如何与 Python- Flask 一起使用?

How teardown_request() works with Python- Flask?

我收到内部错误消息:

"TimeoutError: QueuePool limit of size 5 overflow 10 reached, connection timed out, timeout 30"

在线搜索得到 teardown_request() 解决方案:

@app.teardown_request
def checkin_db(exc):
    try:
        print "Removing db session."
        db.session.remove()
    except AttributeError:
        pass

现在超时错误消失了。但是我没有完全理解 teardown_request ,看起来 db.session.remove() 会在每次请求后调用?还是每一个错误?使用此代码安全吗?

teardown_request 注册一个在每个请求结束时调用的函数,无论它是成功的还是引发了异常。这是清理请求范围对象(如数据库)的好地方 session/transaction。这就是您的代码示例所做的全部。

使用该代码是安全的,db.session.remove() 将在 每个 请求后调用(即使在请求期间发生异常)

有关详细信息,请参阅 Flask Callbacks and Errors and Flask.teardown_request