我正在使用boto3与S3一起操作。如果由于网络问题我的应用程序无法访问S3,则连接将挂起,直到最终超时。我想设置一个较低的连接超时。我遇到了this PR for botocore,它允许设置超时:
$ sudo iptables -A OUTPUT -p tcp --dport 443 -j DROP
from botocore.client import Config
import boto3
config = Config(connect_timeout=5, read_timeout=5)
s3 = boto3.client('s3', config=config)
s3.head_bucket(Bucket='my-s3-bucket')
这将引发ConnectTimeout,但仍然需要花费太长时间才能出错:
ConnectTimeout: HTTPSConnectionPool(host='my-s3-bucket.s3.amazonaws.com', port=443): Max retries exceeded with url: / (Caused by ConnectTimeoutError(<botocore.awsrequest.AWSHTTPSConnection object at 0x2ad5dd0>, 'Connection to my-s3-bucket.s3.amazonaws.com timed out. (connect timeout=5)'))
同时调整连接和读取超时不会影响连接响应的速度。
最佳答案
您可能会受到boto3多次重试连接的默认行为所折磨,而默认情况是在两次之间进行指数回退。我在以下方面取得了不错的成绩:
from botocore.client import Config
import boto3
config = Config(connect_timeout=5, retries={'max_attempts': 0})
s3 = boto3.client('s3', config=config)
关于python - 使用boto3时S3连接超时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41263304/