小编Fal*_*aea的帖子

Async、Lambda、Boto3、ThreadPoolExecutor:连接池已满,正在丢弃连接

一些背景:

我正在开发一个测试套件,用于使用 CodePipeline 和两个 lambda 函数更新和测试全局重定向:一个包装器函数和一个测试器函数。

包装器循环遍历域列表。对于每个域,它获取关联的 S3 文件,然后创建一长串对象(文件中每行一个对象)。示例对象:

redirect = {
     'staging': None,
     'prod': None,
     'country': 'US',
     'language': 'EN',
     'status_code': None,
     'shortlink': None,
     'expected': None
}
Run Code Online (Sandbox Code Playgroud)

然后,包装器获取此对象列表并调用第二个 lambda(测试器 lambda),该 lambda 为每个对象发送一系列 httpx 请求等。

其中最重要的一点是它是异步的 - 否则,lambda 将在 15 分钟时超时。

实际问题:

包装函数只能触发测试器 10 次。否则,当返回结果时,我会收到以下错误:

Connection pool is full, discarding connection: lambda.us-east-1.amazonaws.com
Run Code Online (Sandbox Code Playgroud)

我提高了 ThreadPoolExecutor 的 max_workers,甚至为 boto3 设置了 max_workers。我与 AWS 支持人员进行了交谈,我的实际 lambda 设置有利于我的测试器 lambda 根据需要多次触发。然而,我仍然收到连接池错误。

相关代码:

from botocore.client import Config
from boto3.session import Session
from concurrent.futures import ThreadPoolExecutor, as_completed
import boto3 …
Run Code Online (Sandbox Code Playgroud)

python asynchronous threadpoolexecutor boto3 aws-lambda

8
推荐指数
2
解决办法
1万
查看次数