発電機を使わなくなったら、ガベージコレクションをするべきですよね?次のコードを試しましたが、どの部分が間違っているのかわかりません。
import weakref
import gc
def countdown(n):
while n:
yield n
n-=1
cd = countdown(10)
cdw = weakref.ref(cd)()
print cd.next()
gc.collect()
print cd.next()
gc.collect()
print cdw.next()
最後から2行目で、ガベージコレクターを呼び出しましたが、これ以上呼び出す必要はありませんcd
。gc
権利を解放する必要がありcd
ます。しかし、を呼び出すとcdw.next()
、まだ8を印刷しています。さらにいくつか試してみましたがcdw.next()
、StopIterationまで残りすべてを正常に印刷できました。
ジェネレーターとコルーチンがどのように機能するかを理解したかったので、これを試しました。David BeazleyのPyConプレゼンテーション「コルーチンと並行性に関する興味深いコース」のスライド28で、彼はコルーチンが無期限に実行される可能性があるため、コルーチン.close()
をシャットダウンするために使用する必要があると述べました。それから彼はガベージコレクターが呼び出すと言った.close()
。私の理解では、私たちが.close()
自分自身を呼んだら、もう一度gc
電話.close()
します。すでに閉じられているコルーチンをgc
呼び出すことができないという警告を受け取りますか?.close()
ご入力いただきありがとうございます。