Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 任务队列以“结束”;(2062,“云SQL套接字打开失败,错误为:没有这样的文件或目录';”);_Python_Google App Engine_Google Cloud Sql_Google Tasks Api - Fatal编程技术网

Python 任务队列以“结束”;(2062,“云SQL套接字打开失败,错误为:没有这样的文件或目录';”);

Python 任务队列以“结束”;(2062,“云SQL套接字打开失败,错误为:没有这样的文件或目录';”);,python,google-app-engine,google-cloud-sql,google-tasks-api,Python,Google App Engine,Google Cloud Sql,Google Tasks Api,我们正在构建一个使用大量后端任务(任务队列)的应用程序,在每个任务中,我们都在谷歌云SQL中进行I/O 由于GAE对12个并发连接有限制(不确定这是否是问题?我在中看到) “”在标准环境中运行或使用标准兼容API的每个应用程序引擎实例与Google Cloud SQL实例的并发连接不能超过12个。“” 我的大多数后端任务(每秒100-500个任务)都因为这个问题而失败 另外,我检查了过去4天的活动连接:我没有看到任何连接的连接超过12个 那么,我需要采取什么方法来解决这个问题呢?连接池(如何

我们正在构建一个使用大量后端任务(任务队列)的应用程序,在每个任务中,我们都在谷歌云SQL中进行I/O

由于GAE对12个并发连接有限制(不确定这是否是问题?我在中看到)

“”在标准环境中运行或使用标准兼容API的每个应用程序引擎实例与Google Cloud SQL实例的并发连接不能超过12个。“”

我的大多数后端任务(每秒100-500个任务)都因为这个问题而失败

另外,我检查了过去4天的活动连接:我没有看到任何连接的连接超过12个

那么,我需要采取什么方法来解决这个问题呢?连接池(如何使用GCS在GAE中实现?)?还是别的办法

非常感谢您的帮助和指导。 如果有人需要更多信息,请告诉我


谢谢,

如果正确处理连接,使用标准Python应用程序引擎缩放设置,您不太可能超过12个连接限制

为了演示,我创建了一个调度多个任务的数据库,每个任务获取一个数据库连接并执行一些工作。我能够运行此测试,而不会遇到连接问题

值得确保的一点是,您没有泄漏任何连接(即在某些地方或发生异常时没有关闭连接)

对于MySQLdb,您可以通过使用
contextlib
中的
关闭
来保证没有泄漏连接:

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

您提到的错误通常表明已达到12连接限制。请注意,每个/App Engine instance/的并发连接数限制为12个,而不是整个应用程序。您知道应用程序中的每个应用程序引擎实例正在处理多少个任务队列请求吗?根据链接帖子设置最大并发请求数对您有效吗?(请注意,设置较低的max_concurrent_requests值可能会导致更多的应用程序引擎实例启动以处理请求)。max_concurrent_请求用于前端实例。我的任务队列通常在一秒钟内运行100-500个任务。(我希望这对于大型项目来说不是一个巨大的数字)最大并发请求适用于任何使用自动缩放的模块。你能再描述一下你的设置吗?您是在为任务处理程序使用后端()还是单独的模块?每个实例每秒处理多少任务(不是总任务数)?我使用的是任务队列()。这是由多个队列处理的-我有大约10个队列,用于不同类型的任务,并且处理方式不同。每个队列有500/s的限制(bucket 500)-我猜,这是最大值。```-名称:提醒率:500/s bucket\u大小:500重试\u参数:任务\u重试\u限制:2``以上是一个示例。我有cron作业,它将任务添加到这些队列中。近500个任务。您对处理任务的模块使用哪种扩展?我写了一个小程序,它调度10000个任务来执行一些数据库工作(并保持连接打开一小段时间以增加争用)。测试可以在0个错误的情况下完成。我很想知道你的设置是否有什么不同。我想,这似乎解决了我的问题:但现在,我得到了新的错误:OperationalError:(2013,“在读取初始通信包时与MySQL服务器失去连接”,系统错误:38”)。这与此有关吗?多久发生一次?一天一到三次。这是否与更高的流量一致?您是否可能达到了总体并发限制?对于第一代实例,并发连接限制取决于实例的层。我之前评论中的链接按级别列出了限制。如果您一天只看到此错误几次,则可能不值得升级到更高级别。我可以建议一些替代解决方案1)什么都不做,让任务队列重试失败的任务。任务队列有一个重试机制,因为现实世界并不完美,有时会失败。2) 捕获连接到数据库的错误,短时间睡眠,然后重试。第二次尝试可能会成功。