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 만든 소켓을 사용하여, 그것에서 데이터를 스트리밍해야하므로