2 Stimmen

Wie kann ich die Speichernutzung eines Twisted-Servers reduzieren?

Ich habe einen Audio-Broadcasting-Server mit Python/Twisted geschrieben. Er funktioniert gut, aber der Speicherverbrauch wächst zu schnell! Ich denke, das liegt daran, dass das Netzwerk einiger Benutzer nicht gut genug ist, um die Audiodaten rechtzeitig herunterzuladen.

Mein Audioserver sendet Audiodaten an verschiedene Hörerclients. Wenn einige von ihnen die Audiodaten nicht rechtzeitig herunterladen können, behält mein Server die Audiodaten, bis die Hörer sie erhalten. Und was ist mehr, mein Audio-Server ist ein Broadcasting-Server, es empfangen Audio-Daten, und senden sie an verschiedene Clients, ich obwohl Twisted kopieren diese Daten in verschiedenen Puffer, auch sie sind die gleichen Audio-Stück.

Ich möchte die Speichernutzung reduzieren, also muss ich wissen, wann die Audiosignale vom Client empfangen werden, damit ich entscheiden kann, wann ich einige langsame Clients verwerfen muss. Aber ich habe keine Ahnung, wie ich das mit Twisted erreichen kann. Hat jemand eine Idee?

Und was kann ich sonst noch tun, um die Speichernutzung zu reduzieren?

Danke! Victor Lin.

2voto

Jean-Paul Calderone Punkte 46659

Sie haben es nicht gesagt, aber ich gehe davon aus, dass Sie TCP verwenden. Es wäre schwierig, ein UDP-basiertes System zu schreiben, bei dem der Speicher immer größer wird, weil die Clients die Daten nicht so schnell empfangen können, wie Sie sie zu senden versuchen.

TCP verfügt über integrierte Flusskontrollfunktionen. Wenn ein Empfänger Daten nicht so schnell lesen kann, wie Sie sie senden möchten, wird Ihnen diese Information zur Verfügung gestellt und Sie können langsamer senden. Bei der BSD-Socket-API funktioniert das so, dass ein send(2)-Aufruf blockiert oder 0 zurückgibt, um anzuzeigen, dass dem Sendepuffer keine weiteren Bytes hinzugefügt werden können. In Twisted funktioniert das über ein System namens "Producer und Consumer". Das Wesentliche an diesem System ist, dass man einen Producer bei einem Consumer registriert. Der Producer ruft den Consumer wiederholt zum Schreiben auf. Wenn der Konsument nicht mithalten kann, ruft er pauseProducing über den Hersteller. Wenn der Verbraucher wieder bereit für weitere Daten ist, ruft er resumeProducing über den Hersteller.

Ausführlichere Informationen zu diesem System finden Sie in der Anleitung für Hersteller/Verbraucher Teil der Dokumentation von Twisted.

-5voto

Ken Kinder Punkte 11805

Stellen Sie sicher, dass Sie Pythons Müllsammler und löschen Sie dann die Variablen, die Sie nicht verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X