我正在使用生成器作为协程来制作类似于任务调度程序的东西。在下面的代码中,我需要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