2009-08-05 5 views
4

Twisted Python으로 작성된 꽤 집중적 인 채팅 소켓 서버가 있습니다. internet.TCPServer를 사용하여 팩토리로 시작하고 그 팩토리 참조는 모두 클라이언트와의 통신.Twisted Python에서 - 프로토콜 인스턴스가 완전히 할당 취소되었는지 확인하십시오.

일단 클라이언트가 연결 해제되면 프로토콜 인스턴스가 완전히 파괴되는지 어떻게 확인해야합니까?

클라이언트가 연결을 끊고 모든 작업을 바로 중지하려고 시도한 connectionLost라는 기능이 있는데도 불구하고 일부 원자로 (예 : twisted.words 인스턴스)가 쓸모없는 프로토콜 인스턴스에 대해 계속 실행되는 것으로 의심됩니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

감사합니다.

+0

나는이 질문에 답하고 싶지만, 약간의 설명이 필요하다. 한가지 - twisted.words는 패키지가 아닌 클래스입니다. 어떤 구체적인 인스턴스가 여전히 존재한다고 생각하십니까? 어떤 특정 행동으로 인해 프로토콜 인스턴스가 너무 오래 살아 있다고 믿게 되는가? 로그 메시지, 네트워크 트래픽 또는 다른 개체의 상태가 수정되었거나 무엇이 표시됩니까? 간단히 말해, 객체를 파이썬에서 강제로 할당 해제 할 수 없으면, 객체에 대한 모든 참조를 제거해야합니다. – Glyph

+0

감사합니다. 그때 내가 겪었던 것을 desrcibe에 최선을 다할 것이지만,이 소켓 서비스를 더 이상 사용하지 않아서 세부 사항이 정확하지 않을 수 있습니다. 각각의 새 TCP 소켓 연결은 jabber 서버에 대한 연결을 관리하는 XMPPClientFactory (twisted.words.protocols.jabber.client.XMPPClientFactory) 인스턴스를 시작 했으므로 프로토콜 인스턴스의 할당이 해제되고 참조 된 클라이언트 객체가 TCP 클라이언트는 연결을 끊는 반면 실제로는 클라이언트 jabber 객체가 파괴되지 않은 것처럼 보입니다. 문제에 대해 더 자세히 설명해 주시면 알려주세요. 감사! –

답변

-1

이 문제를 해결하기 위해 프로토콜 클래스에 __del__ 메서드를 설정했으며 클라이언트가 연결을 끊은 시간으로부터 1 분 이내에 가비지 수집되지 않은 프로토콜 인스턴스를 로깅하고 있습니다.

아무도 더 좋은 해결책이 있다면 나는 그것에 대해 듣기를 기뻐 하겠지만 지금까지이 로그를 사용하여 잠재적 인 메모리 누수를 수정했습니다.

감사합니다.

+0

'__del__' 메서드는 정말 나쁜 생각입니다. 이렇게하면주기가 수집되지 않습니다. 를 참조하십시오. – Glyph

관련 문제