cymel.pyutils.finalizer

任意のオブジェクトが破棄されたときに呼び出されるファイナライザ機能。

クラスの特殊メソッド __del__ には以下の問題がある。

  • __del__ 中の例外は補足できない。

  • インタプリタが終了する時に呼ばれる事は保証されない。

  • 循環参照がある場合で且つ __del__ が在ると解放されなくなる。 (循環参照があると gc は __del__ を呼び出す適切なタイミングを保証出来なくなる為)

注釈

__del__ が在ると循環参照の状況で解放されなくなる問題は python 3.4 以降( PEP 442 )で解決されている。

Functions:

deregisterFinalizer(key)

登録済みファイナライザを削除する。

registerFinalizer(obj, proc)

オブジェクトが破棄された時に呼び出されるプロシージャを登録する。

trackDestruction(obj[, logger, maxChars])

ファイナライザを使って、オブジェクトの削除を簡易にログする。

Functions Details:

cymel.pyutils.finalizer.deregisterFinalizer(key)

登録済みファイナライザを削除する。

パラメータ:

key (int) -- 登録時に返されたID。

cymel.pyutils.finalizer.registerFinalizer(obj, proc)

オブジェクトが破棄された時に呼び出されるプロシージャを登録する。

パラメータ:
  • obj -- 対象のオブジェクト。

  • proc (callable) -- 登録するプロシージャ。

戻り値の型:

int (ファイナライザID)

cymel.pyutils.finalizer.trackDestruction(obj, logger=None, maxChars=0)

ファイナライザを使って、オブジェクトの削除を簡易にログする。

パラメータ:
  • obj -- 対象のオブジェクト。

  • logger -- ログ用に str を受け取れる任意の実行可能オブジェクト。 省略時は print される。

  • maxChars (int) -- ログ出力される repr の文字数がこの数を超える場合に メッセージを調整する。ゼロの場合はその判定をしない。

戻り値の型:

int (ファイナライザID)