【问题标题】:TCP sockets not closing when fetching from S3 using boto使用 boto 从 S3 获取时 TCP 套接字未关闭
【发布时间】:2014-09-28 03:39:52
【问题描述】:

您如何清理/关闭/重用使用 boto 创建的套接字以连接到 S3 存储桶?

This discussion 从 2010 年开始说这是 httplib.HTTPSConnection 而不是 boto 的问题。在我的代码中,我使用key.close(fast=True) 作为从boto.s3.bucket.Bucket.list() 获得的所有密钥。每次我使用key引用文件时,boto都会打开一个唯一的socket,过一会儿我会得到[Errno 24]: Too many open files

当我运行lsof | grep python 时,我得到了各种各样的:

python    10573 ec2-user  399u     IPv4  59221       0t0    TCP ip-10-0-0-113.ec2.internal:59293->s3-1-w.amazonaws.com:https (CLOSE_WAIT)
python    10573 ec2-user   72u     IPv4  60910       0t0    TCP ip-10-0-0-113.ec2.internal:37952->s3-1-w.amazonaws.com:https (ESTABLISHED)
python    10573 ec2-user   91u     sock    0,6       0t0  61105 can't identify protocol

这些是连接类型(IPv4 套接字、套接字)、TCP 节点,名称(最后一列)是 localhost:port->TCP 远程地址(TCP/TPI 的状态)。

ulimit -a 说打开文件的最大值是 1024,一个选项只是提高最大值。但是,我想确保我正在关闭我应该关闭的文件。

我认为制作和重复使用 1 个套接字更聪明,用 boto 可以吗?

【问题讨论】:

    标签: python sockets amazon-web-services tcp amazon-s3


    【解决方案1】:

    我泄露了文件描述符:(

    Boto 键是可迭代的,因此您应该只使用原始的 boto-made-socket(即忽略它并让 boto 为您完成所有工作)从中流式传输数据:

    for data in key: 
       # etc
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-26
      • 2015-12-07
      • 1970-01-01
      • 2015-09-04
      • 2012-02-10
      • 2011-08-08
      • 2015-05-12
      • 2013-04-29
      相关资源
      最近更新 更多