ライフサイクル
retain 状態の Area
retain 状態の Area は、次の単純な作業サイクルに従います。
flowchart LR
Waiting("待機") --> Observe("observe()") --> Tick("tick()")
Tick --> Waiting
observe(context)
最新のプロバイダー固有の Context ビューを受け取ります。基底実装は、その内容を self._observe_snapshot に保存します。観察した内容は読み取り専用として扱う必要があります。
tick()
Area を 1 ステップ進めます。状態と invocation timing の変更は tick() の内部で行い、None または空でない list[Message] を返します。
P.S. Message は Hydrangea が定義する、プロバイダー固有ではないメッセージ型です。
retired 状態の Area
retire した Area は作業サイクルを離れ、削除へ進みます。
flowchart LR
Retired[retired] --> Promote["promote()<br/>対象の場合"]
Promote --> Cleanup["gc_prologue()"]
Cleanup --> Removed[削除]
promote()
Area より長く保持すべき汎用メッセージを返します。デフォルト実装は空の tuple を返します。
Area が最初の tick() より前に retire した場合、promote() は呼ばれず、直接 gc_prologue() へ進みます。
gc_prologue()
Area が所有する重要なリソースを解放するためのフックです。Area の GC より前に必ず呼び出されます。デフォルト実装は何もしません。
ライフサイクル状態
AreaLifeState | 意味 |
|---|---|
retain | 作業サイクルを継続します。 |
retired | observe と tick を停止し、終了処理を待ちます。 |
遷移は一方向です:retain -> retired -> removed。
Area のサブクラスは retain から始まり、完了時に self._retire() を呼び出します。