2009-08-05 19 views
4

Twisted Pythonで書かれたかなり集中的なチャットソケットサーバーを持っています。インターネットとの接続を開始します。クライアントとの通信。Twisted Python - プロトコルインスタンスが完全に割り当て解除されることを確認してください

クライアントが切断された後、プロトコルインスタンスが完全に消滅するようにするにはどうすればよいですか?

私はconnectionLostという名前の関数を持っています。これは、クライアントが切断されたときに起動され、そこにあるすべてのアクティビティを停止しようとしますが、リアクション用のもの(twisted.wordsインスタンスなど)は、

これを処理するにはどうすればよいでしょうか?

ありがとうございます!

+0

この質問にお答えしたいと思いますが、説明が必要です。 "twisted.words"インスタンスのようなものはありません。 - twisted.wordsはパッケージであり、クラスではありません。あなたはまだ特定のインスタンスは信じていますか?どのような具体的な振る舞いを見ていると、あなたのプロトコルインスタンスが長く生きていると信じられるでしょうか?ログメッセージ、ネットワークトラフィック、または他のオブジェクト上の変更された状態などが表示されますか?簡単に言えば、オブジェクトをPythonで強制的に解放することはできません。すべての参照を削除するだけで済みます。 – Glyph

+0

ありがとうございます。私はそれまでに経験していたものをdesrcibeするのに全力を尽くしますが、このソケットサービスをもう使用しないので詳細が正確ではないかもしれません。 それぞれ新しいTCPソケット接続が、ジャバーサーバーへの接続を管理していたXMPPClientFactory(twisted.words.protocols.jabber.client.XMPPClientFactory)インスタンスを開始しました。プロトコルインスタンスの割り当てが解除され、参照されたクライアントオブジェクトがTCP実際にはクライアントジャバーオブジェクトが破壊されていないように見えますが、クライアントは切断されます。 これが問題をより詳しく説明している場合はお知らせください。ありがとう! –

答えて

-1

この問題を解決するために、プロトコルクラスで__del__メソッドを設定しました。クライアントが切断されてから1分以内にガベージコレクションされていないプロトコルインスタンスを記録しています。

もっと良い解決策があれば、私はまだそれについて聞いてうれしいですが、これまで私はこのログを使っていくつかの潜在的なメモリリークを修正しました。

ありがとうございます!

+0

'__del__'メソッドは本当に悪い考えです。これにより、サイクルが収集されなくなります。 を参照してください。 – Glyph

関連する問題