Task queues end up with "(2062, 'Cloud SQL socket open failed with error: No such file or directory')"
Task queues end up with "(2062, 'Cloud SQL socket open failed with error: No such file or directory')"
我们正在构建一个使用繁重后端任务(任务队列)的应用程序,并且在每个任务中 - 我们在 Google 云 SQL.[=14= 中执行 I/O ]
由于 GAE 对 12 个并发连接有限制(不确定这是否是问题?我在 看到)
""Each App Engine instance running in a Standard environment or using Standard-compatible APIs cannot have more than 12 concurrent connections to a Google Cloud SQL instance." - https://cloud.google.com/sql/faq"
我的大部分后端任务(每秒 100-500 个任务)都因为这个问题而失败。
此外,我检查了过去 4 天的活动连接:我没有看到任何连接超过 12 个连接。
那么,我需要采取什么方法来解决这个问题?连接池(如何在带有 GCS 的 GAE 中执行此操作?)?或其他一些修复?
非常感谢任何帮助 - 指导。
如果有人需要更多信息,请告诉我。
谢谢,
如果连接处理得当,您不太可能超过标准 Python App Engine 缩放设置的 12 个连接限制。
为了演示,我创建了一个 small application 来安排许多任务,每个任务获取一个数据库连接并做一些工作。我能够 运行 此测试而不会遇到连接问题。
值得确保的一件事是您没有泄漏任何连接(即在某些地方或发生异常时不关闭连接)。
对于 MySQLdb,您可以通过使用 contextlib
:
中的 closing
来保证您没有泄漏连接
from contextlib import closing
def getDbConnection():
return MySQLdb.connect(unix_socket='/cloudsql/instance_name', db='db', user='user', charset='utf8')
with closing(getDbConnection()) as db:
# do stuff, database is guaranteed to be closed
我们正在构建一个使用繁重后端任务(任务队列)的应用程序,并且在每个任务中 - 我们在 Google 云 SQL.[=14= 中执行 I/O ]
由于 GAE 对 12 个并发连接有限制(不确定这是否是问题?我在 看到)
""Each App Engine instance running in a Standard environment or using Standard-compatible APIs cannot have more than 12 concurrent connections to a Google Cloud SQL instance." - https://cloud.google.com/sql/faq"
我的大部分后端任务(每秒 100-500 个任务)都因为这个问题而失败。
此外,我检查了过去 4 天的活动连接:我没有看到任何连接超过 12 个连接。
那么,我需要采取什么方法来解决这个问题?连接池(如何在带有 GCS 的 GAE 中执行此操作?)?或其他一些修复?
非常感谢任何帮助 - 指导。 如果有人需要更多信息,请告诉我。
谢谢,
如果连接处理得当,您不太可能超过标准 Python App Engine 缩放设置的 12 个连接限制。
为了演示,我创建了一个 small application 来安排许多任务,每个任务获取一个数据库连接并做一些工作。我能够 运行 此测试而不会遇到连接问题。
值得确保的一件事是您没有泄漏任何连接(即在某些地方或发生异常时不关闭连接)。
对于 MySQLdb,您可以通过使用 contextlib
:
closing
来保证您没有泄漏连接
from contextlib import closing
def getDbConnection():
return MySQLdb.connect(unix_socket='/cloudsql/instance_name', db='db', user='user', charset='utf8')
with closing(getDbConnection()) as db:
# do stuff, database is guaranteed to be closed