【发布时间】: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