以下の関数には、戻り値として``フレームレコード''を返す関数があります。`` フレームレコード''は長さ6のタプルで、以下の値を格納しています:フレームオ ブジェクト・ファイル名・実行中の行番号・関数名・コンテキストのソース行の リスト・ソース行リストの実行中行のインデックス。
フレームレコードの最初の要素などのフレームオブジェクトへの参照を保存する と、循環参照になってしまう場合があります。循環参照ができると、Pythonの循 環参照検出機能を有効にしていたとしても関連するオブジェクトが参照している すべてのオブジェクトが解放されにくくなり、明示的に参照を削除しないとメモ リ消費量が増大する恐れがあります。
参照の削除をPythonの循環参照検出機能にまかせる事もできますが、 finally節で循環参照を解除すれば確実にフレーム(とそのローカル 変数)は削除されます。また、循環参照検出機能はPythonのコンパイルオプショ ンやgc. disable()で無効とされている場合があります ので注意が必要です。例:
def handle_stackframe_without_leak(): frame = inspect.currentframe() try: # do something with the frame finally: del frame
以下の関数でオプション引数contextには、戻り値のソース行リストに何 行分のソースを含めるかを指定します。ソース行リストには、実行中の行を中心 として指定された行数分のリストを返します。
frame[, context]) |
frame[, context]) |
traceback[, context]) |
) |
[context]) |
[context]) |