【问题标题】:Amazon S3 read file timeoutAmazon S3 读取文件超时
【发布时间】:2021-06-30 04:12:11
【问题描述】:

我是新手。

我想使用 scipy 在 S3 上获取音频文件 (.wav) 的属性,如下所示:

import boto3
from scipy.io import wavfile
from io import BytesIO
s3 = boto3.client('s3')

content = s3.get_object(Bucket=BUCKET, Key=key)['Body']
data = content.read() # GOT timeout here
wrapper = BytesIO(data)
samplerate, audio_file = wavfile.read(wrapper)

我在 S3 上测试了一些文件(50MB、112MB、150MB),我在 content.read()

处遇到了 112MB、150MB 的超时

对这个问题有什么想法吗?

提前致谢

【问题讨论】:

    标签: python amazon-web-services amazon-s3 scipy timeout


    【解决方案1】:

    您需要在客户端配置中设置连接超时和套接字超时。 Click here for reference model ,这是一个如何在 AWS SDK 1.9.3 中执行的示例

    ClientConfiguration config = new ClientConfiguration(); 
    config.setConnectionTimeout(connectionTimeout);
    config.setSocketTimeout(readTimeout); 
    AmazonS3 s3 = new AmazonS3Client(credentials, config);
    

    【讨论】:

    • 非常感谢您的快速回复。我在哪里可以使用这个例子?以及如何?
    【解决方案2】:

    您可以将以下方法添加到您的代码中。

    @SuppressWarnings("checkstyle:hiddenfield")
    public ClientConfiguration withConnectionTimeout(int connectionTimeout) {
    setConnectionTimeout(connectionTimeout);
    return this;
    }
    

    【讨论】:

    • 让我试试。谢谢!!
    【解决方案3】:

    我在这里使用的解决方案:
    下载文件而不是将其流式传输到内存中(read()
    意思是:

    os.mkdir('/tmp/file') # create dir by os library
    path = '/tmp/file.example.wav'
    s3.download_file(Bucket, key, path) # download file from s3
    samplerate, audio_file = wavfile.read(path)
    
    Beside the point, as I researched, use `mutagen` is better `scipy`
    

    我认为这是非常好的和更容易的解决方案
    我想把这个分享给需要的人

    使用@Anwesha 的解决方案,也许很好,但对于像我这样的人来说很难理解

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-26
      • 1970-01-01
      • 2012-09-28
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多