ジェネレーターをコルーチンとして使ってタスクスケジューラーのようなものを作っています。以下のコードでは、print cleanup
決定論的に実行する必要があります。
オブジェクトをガベージ コレクターに解放すると、コンテキスト マネージャーが終了するようです。しかし、私は GC のタイミングに頼るよりもよく知っています。それは本当に GC が呼び出しているの__exit__
か、それとも別のメカニズムなのか?
どうすれば厳密に強制できprint 'cleanup'
ますか?
>>> from contextlib import contextmanager
>>> @contextmanager
... def foo():
... print 'setup'
... try:
... yield
... finally:
... print 'cleanup'
...
>>> def bar():
... with foo():
... while True:
... yield 'bar'
...
>>> b = bar()
>>> b.next()
setup
'bar'
>>> b = None
cleanup