2

Python/Twisted で音声放送サーバーを作成しました。正常に動作しますが、メモリの使用量が急速に増加します! これは、一部のユーザーのネットワークが、オーディオを時間内にダウンロードするのに十分ではない可能性があるためだと思います。

私のオーディオサーバーは、オーディオデータを別のリスナーのクライアントにブロードキャストします。一部のクライアントが時間内にオーディオをダウンロードできない場合、つまり、サーバーはリスナーが受信するまでオーディオデータを保持します。さらに、私のオーディオ サーバーはブロードキャスト サーバーであり、オーディオ データを受信して​​別のクライアントに送信します。Twisted では、同じオーディオ ピースであっても、それらのデータを別のバッファにコピーします。

メモリの使用量を減らしたいので、クライアントがいつオーディオを受信したかを知る必要があります。これにより、遅いクライアントをいつ破棄するかを決定できます。しかし、Twisted でそれを達成する方法がわかりません。誰かアイデアがありますか?

また、メモリ使用量を減らすために他に何ができますか?

ありがとう。ビクター・リン。

4

2 に答える 2

2

あなたは言いませんでしたが、私はあなたがTCPを使用していると仮定します。データを送信しようとしているほど速くデータを受信できないクライアントのために、メモリが増え続けているUDPベースのシステムを作成するのは難しいでしょう。

TCPにはフロー制御機能が組み込まれています。受信者が送信したい速度でデータを読み取れない場合は、この情報が利用可能になり、送信速度を遅くすることができます。これがBSDソケットAPIで機能する方法は、send(2)呼び出しがブロックするか、0を返し、送信バッファーにバイトを追加できないことを示します。Twistedでの動作は、「プロデューサーとコンシューマー」と呼ばれるシステムによるものです。このシステムの要点は、プロデューサーをコンシューマーに登録することです。プロデューサーは、コンシューマーに書き込みを繰り返し呼び出します。消費者が追いつけないときはpauseProducing、生産者に呼びかけます。コンシューマーが再びデータの準備ができるとresumeProducing、プロデューサーを呼び出します。

このシステムの詳細については、Twistedのドキュメントの一部であるプロデューサー/コンシューマーのハウツーを参照してください。

于 2009-11-10T02:50:28.923 に答える
-5

Python のガベージ コレクターを使用していることを確認してから、使用していない変数を確認して削除します。

于 2009-11-09T02:38:36.380 に答える