【发布时间】:2020-02-20 20:05:56
【问题描述】:
我在 App Engine Standard 上有一个使用 Cloud SQL (postgres) 数据库的应用。每当应用程序似乎闲置时,我都会收到BrokenPipeErrors,但我不知道为什么。
我从 stackdriver 获得以下堆栈跟踪:
BrokenPipeError: [Errno 32] Broken pipe
at write (/opt/python3.7/lib/python3.7/socket.py:607)
at execute (/env/lib/python3.7/site-packages/pg8000/core.py:1908)
at execute (/env/lib/python3.7/site-packages/pg8000/core.py:860)
at do_execute (/env/lib/python3.7/site-packages/sqlalchemy/engine/default.py:588)
at _execute_context (/env/lib/python3.7/site-packages/sqlalchemy/engine/base.py:1246)
at reraise (/env/lib/python3.7/site-packages/sqlalchemy/util/compat.py:153)
at _handle_dbapi_exception (/env/lib/python3.7/site-packages/sqlalchemy/engine/base.py:1478)
at _execute_context (/env/lib/python3.7/site-packages/sqlalchemy/engine/base.py:1250)
at _execute_clauseelement (/env/lib/python3.7/site-packages/sqlalchemy/engine/base.py:1101)
at _execute_on_connection (/env/lib/python3.7/site-packages/sqlalchemy/sql/elements.py:293)
at execute (/env/lib/python3.7/site-packages/sqlalchemy/engine/base.py:982)
at _execute_and_instances (/env/lib/python3.7/site-packages/sqlalchemy/orm/query.py:3414)
at __iter__ (/env/lib/python3.7/site-packages/sqlalchemy/orm/query.py:3389)
at one_or_none (/env/lib/python3.7/site-packages/sqlalchemy/orm/query.py:3316)
at one (/env/lib/python3.7/site-packages/sqlalchemy/orm/query.py:3347)
at load_on_pk_identity (/env/lib/python3.7/site-packages/sqlalchemy/orm/loading.py:284)
at _get_impl (/env/lib/python3.7/site-packages/sqlalchemy/orm/query.py:1116)
at get (/env/lib/python3.7/site-packages/sqlalchemy/orm/query.py:1004)
at graphql (/srv/app.py:168)
at wrapper (/env/lib/python3.7/site-packages/flask_jwt_extended/view_decorators.py:129)
at wrapped_function (/env/lib/python3.7/site-packages/flask_cors/decorator.py:128)
at dispatch_request (/env/lib/python3.7/site-packages/flask/app.py:1935)
at full_dispatch_request (/env/lib/python3.7/site-packages/flask/app.py:1949)
at reraise (/env/lib/python3.7/site-packages/flask/_compat.py:39)
at handle_user_exception (/env/lib/python3.7/site-packages/flask/app.py:1820)
at full_dispatch_request (/env/lib/python3.7/site-packages/flask/app.py:1951)
at wsgi_app (/env/lib/python3.7/site-packages/flask/app.py:2446)
关键行似乎是at graphql (/srv/app.py:168),即:
user = models.User.query.get(user_uuid) # Flask-SQLAlchemy convenience method
看起来我的数据库连接已经失效,这就是它失败的原因。它也发生在同一行的不同入口点。我想我的问题是——当 App Engine 关闭/休眠实例时,它会关闭连接吗?在我看来,如果是这样,它应该在重新初始化时重新启动它们。我无法在本地复制它,所以我认为它与服务的配置方式有关,我们的 Cloud SQL 实例会自动关闭连接还是 App Engine 正在这样做?但是这方面的文档很少,我还没有找到任何关于它的信息。有谁知道是什么原因造成的?
【问题讨论】:
-
我也有同样的问题..你找到解决办法了吗?
标签: python google-app-engine flask sqlalchemy google-cloud-sql