2009-11-08 5 views
2

파이썬/트위스트로 오디오 방송 서버를 썼습니다. 그것은 잘 동작하지만 메모리 사용량이 너무 빨리 증가합니다! 일부 사용자의 네트워크가 오디오를 제 시간에 다운로드하기에 충분하지 않을 수 있기 때문입니다.Twisted 서버의 메모리 사용을 어떻게 줄일 수 있습니까?

내 오디오 서버가 오디오 데이터를 여러 청취자의 클라이언트에 브로드 캐스트합니다. 일부 오디오가 시간 내에 오디오를 다운로드 할 수없는 경우, 즉 내 서버가 청취자가 수신 할 때까지 오디오 데이터를 보관합니다. 그리고 더 많은 것은, 나의 오디오 서버는 방송 서버이고, 그것은 오디오 데이터를 수신하고 다른 클라이언트들에게 보내지 만, 나는 서로 다른 버퍼에 데이터를 복사한다. 심지어 그들은 동일한 오디오 파일이다.

메모리 사용량을 줄이기 위해 클라이언트가받은 오디오를 언제 알 수 있어야하므로 느린 클라이언트를 언제 폐기할지 결정할 수 있습니다. 그러나 저는 Twisted로 그것을 어떻게 달성 할 수 있을지 전혀 모릅니다. 누구든지 아이디어가 있습니까?

그리고 메모리 사용량을 줄이기 위해 내가 뭘 할 수 있습니까?

감사합니다. 빅터 린.

+0

다음은 내가 작성한 또 다른 게시물입니다. 마침내 이유를 찾을 수 있습니다. http://stackoverflow.com/questions/2100192/how-to-find-the-source-of-increasing-memory-usage-of-a- 꼬인 서버/2229010 # 2229010 –

답변

2

당신은 말하지 않았지만, 나는 당신이 TCP를 사용하고 있다고 가정 할 것입니다. UDP 기반 시스템을 작성하는 것은 어려울 것입니다.이 시스템은 전송하려는 데이터만큼 빠르게 데이터를 수신 할 수없는 클라이언트 때문에 메모리를 늘려야합니다.

TCP에는 기본 제공되는 흐름 제어 기능이 있습니다. 수신자가 전송하고자하는 속도만큼 데이터를 읽을 수 없으면이 정보를 사용할 수있게되고 더 느리게 전송할 수 있습니다. BSD 소켓 API와 작동하는 방식은 send (2) 호출이 블록을 보내거나 0을 반환하여 송신 버퍼에 바이트를 추가 할 수 없다는 것을 나타냅니다. Twisted에서 작동하는 방식은 "생산자와 소비자"라는 시스템입니다. 이 시스템의 요지는 당신이 소비자를 생산자로 등록한다는 것입니다. 생산자는 반복적으로 소비자에 대한 쓰기를 호출합니다. 소비자가 따라갈 수 없으면 생산자의 pauseProducing으로 전화합니다. 소비자가 더 많은 데이터를 다시 준비 할 때 생산자의 resumeProducing을 호출합니다.

이 시스템에 대한 자세한 내용은 Twisted의 설명서 producer/consumer howto에서 확인할 수 있습니다.

-5

파이썬의 garbage collector을 사용하고 있는지 확인한 다음 사용하지 않는 변수를 찾아서 삭제하십시오.

관련 문제