したがって、PythonをフロントエンドGUIとして使用し、バックエンドとしてストレージおよびメモリ管理のためにいくつかのCファイルと対話します。GUIのウィンドウが閉じられるか終了するたびに、すべてのデストラクタメソッドを呼び出します私の割り当てられた変数のために。
プログラム全体を終了する直前に、C Valgrindチェックなどのメモリリークや可用性をチェックして、メモリリークがないことを確認する方法はありますか?
出口の例:
from tkinter import *
root = Tk() # New GUI
# some code here
def destructorMethods:
myFunctions.destructorLinkedList() # Destructor method of my allocated memory in my C file
# Here is where I would want to run a Valgrind/Memory management check before closing
root.destroy() # close the program
root.protocol("WM_DELETE_WINDOW", destructorMethods) # When the close window option is pressed call destructorMethods function
Valgrind
を使用する場合は、この readme が役立ちます。たぶん this は、Valgrind
をフレンドリーにするための別の優れたリソースである可能性がありますpythonをプログラムで使用します。
しかし、tracemalloc
のような他のものを検討する場合は、その使用例 here を簡単に取得できます。例は非常に簡単に解釈できます。たとえば、彼らのドキュメントによると、
import tracemalloc
tracemalloc.start()
# ... run your application ...
snapshot = tracemalloc.take_snapshot()
top_stats = snapshot.statistics('lineno')
print("[ Top 10 ]")
for stat in top_stats[:10]:
print(stat)
これは次のようなものを出力します。
<frozen importlib._bootstrap>:716: size=4855 KiB, count=39328, average=126 B
<frozen importlib._bootstrap>:284: size=521 KiB, count=3199, average=167 >
これを解析して調査のメモリ使用量をプロットするか、参照 doc を使用してより具体的なアイデアを得ることができます。
この場合、プログラムは次のようになります。
from tkinter import *
import tracemalloc
root = Tk() # New GUI
# some code here
def destructorMethods:
tracemalloc.start()
myFunctions.destructorLinkedList() # Destructor method of my allocated memory in my C file
# Here is where I would want to run a Valgrind/Memory management check before closing
snapshot = tracemalloc.take_snapshot()
top_stats = snapshot.statistics('lineno')
print("[ Top 10 ]")
for stat in top_stats[:10]:
print(stat)
root.destroy() # close the program
root.protocol("WM_DELETE_WINDOW", destructorMethods)
別のオプションは、メモリプロファイラーを使用して、可変時間でのメモリ使用量を確認することです。パッケージは入手可能です ここ 。このパッケージのインストール後、おそらくスクリプトで次のコマンドを使用して、pngファイルのメモリ使用量を経時的に取得できます。
mprof run --include-children python your_filename.py
mprof plot --output timelyplot.png
または、必要に応じて、memory_profiler
パッケージで利用可能なさまざまな関数を使用できます。多分 this チュートリアルはあなたにとって興味深いものになるでしょう。
trace pythonメモリリーク この記事をご覧になり、詳細については、これらの質問を参照してください。SO:
リーク検出をサポートするデバッグメモリアロケータを使用できると思います。
Tcmallocのような何かがします。 LD_PRELOADするだけで、malloc、freeなどのすべての呼び出しでリークがデバッグされます。