2014-09-23 3 views
1

boto을 사용하여 S3 버킷에 연결하는 소켓을 정리/닫기/재사용하는 방법은 무엇입니까?boto를 사용하여 S3에서 페치 할 때 TCP 소켓이 닫히지 않음

This discussion (2010)은 boto 대신 httplib.HTTPSConnection 인 경우 문제가 있다고합니다. 내 코드에서는 boto.s3.bucket.Bucket.list()에서 얻는 모든 키에 key.close(fast=True)을 사용합니다. 파일을 참조하기 위해 키를 사용할 때마다 boto는 고유 한 소켓을 열고 잠시 후에 [Errno 24]: Too many open files을 얻습니다.

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입니다 : 내가 lsof | grep python을 실행하면

나는 이들의 다양한 얻을 포트 - > TCP 원격 주소 (TCP/TPI 상태).

ulimit -a은 열린 파일 최대 값이 1024이고 옵션이 최대 값을 단순히 올리는 것입니다. 그러나 내가해야하는 파일을 닫고 있는지 확인하고 싶습니다.

1 개의 소켓을 만들고 재사용하는 것이 더 똑똑하다고 생각합니까? 당신이 모든 작업을 수행하는 즉, 그것을 무시하고 BOTO지고 (다만 원래 BOTO 만든 소켓을 사용하여, 그것에서 데이터를 스트리밍해야하므로

답변

1

내가 누출 된 파일 설명 :(

BOTO 키, 반복 가능하다 당신을 위해) :

for data in key: 
    # etc 
관련 문제