2016-04-07 33 views
0

Python 3.4とTkinterでアプリを作成しました。 私のアプリケーションはいくつかの(3-5)スレッドを実行し、各スレッドは以下のように動作します。Windowsタスクマネージャー:Pythonアプリケーションのメモリ使用量が増加しました

    のrecvfrom()ソケットからのメッセージを取得するための
  1. 無限ループ(UDP)メッセージを表示し、

は、私は窓の組み込みOS上で私のアプリを使うファイルに書き込む

  • 無限ループいますXPに基づいて、 とTaskManager、 でメモリ使用量を監視しています。シャットダウンなしで長時間(おそらく月以上)のアプリケーションを実行したいからです。

    その後、問題は(物理的な)

    メモリ使用量が徐々に増加し、時には大幅に減少しています。 全体的には大丈夫です。

    しかし、長期的な視点で仮想メモリサイズ(VMSize)が増加しています。 たとえば、私がアプリを起動したとき、VMSizeは26MBでした。 と翌日、29MB、 となり、翌日には32MBになります。 時には少し増加することもありますが、少し減少することもあります(例えば20KB)。 しかし全体的にそれは上昇傾向にあります。 これはそれほど大きな音量ではありませんが、「増加」すると気になりません。

    GarbageCollectionが助けになり、私のコードに というgc.collect()を挿入すると、3時間ごとに呼び出されるようになりました。 何も変更されておらず、print(gc.collect())は常に0を示しました(アプリケーション自体の起動直後を除く)。

    このメモリリークはありますか?

    リファレンスサイクルはPythonの のPythonでメモリリークを引き起こす可能性がありますが、自分でdel()を定義することはありません。

    ありがとうございます。

  • 答えて

    0

    私は自分で原因を発見したので、ここに書き込んで質問を終了します。

    メモリリークの原因は、複数のスレッドからtkinter関数を呼び出していることでした。 tkinterはスレッドセーフではないため、私はそのルールに違反していました。

    メインスレッドのみがtkinter関数を使用し、その後 メモリリークが発生するようにプログラムを変更しました。

    ありがとうございます。

    関連する問題