파이썬 프로그램은 http 요청을하기 위해 httplib2.Http를 사용합니다. 일단 요청을 생성해야한다면 httplib2.Http 객체를 만들어 내 프로그램이 자주 httplib2.Http 객체를 생성/파괴 할 수 있도록합니다.이것은 httplib2의 버그입니까
내 프로그램이 열려있는 파일의 최대 개수에 도달하기 때문에 쉽게 충돌하는 것으로 나타났습니다./proc/fd를 검사하면 오픈 소켓 fds가 너무 많습니다. 이 문제로 인해 httplib2 소스 코드를 파헤쳐 야했습니다.
else:
content = ""
if method == "HEAD":
conn.close()
else:
content = response.read()
response = Response(response)
if method != "HEAD":
content = _decompressContent(response, content)
break
이것은 HTTP 메소드가 HEAD 인 경우 폐쇄 전용 그 소켓을 보여줍니다
은 그 때 나는 httplib2.Http._conn_request 방법으로, 같은 코드가 있었다 것을 발견했다. 아마 httplib2가 어떻게 든 소켓을 재사용하고 싶어했을 것입니다. 하지만 Http 클래스에는 close() 메서드가 없습니다. 즉, Http 요청을하면 소켓은 프로세스가 종료 될 때까지 닫히지 않습니다. 내 프로그램이 잘 작동, 그 후 else:
content = ""
if method == "HEAD":
conn.close()
else:
content = response.read()
response = Response(response)
if method != "HEAD":
content = _decompressContent(response, content)
conn.close() # I ADD THIS CLOSE
break
:
은 그 때 나는 코드를 수정했습니다.그러나 httplib2가 매우 오래되고 공통된 lib라는 점을 감안할 때 여전히 httplib2의 버그 인 경우 궁금합니다.