1 回答

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊
Python 為__del__將在實(shí)例被垃圾收集時(shí)調(diào)用的類提供了一個(gè)dunder 方法,如果它們被垃圾收集。
使用時(shí),該__del__方法通常會(huì)執(zhí)行某種清理。
由于無意中阻止對(duì)象被收集這一事實(shí)相當(dāng)容易,因此通常建議不要依賴__del__執(zhí)行清理(而不是上下文管理器__exit__或顯式.close()方法)。
您的錯(cuò)誤突出了避免依賴的不同原因__del__,但是:在關(guān)閉期間__del__將被調(diào)用,但可能在它依賴的其他東西被釋放之后。
評(píng)論中鏈接的關(guān)于 github 問題的建議解決方法應(yīng)該具有指導(dǎo)意義,因?yàn)樗鼈兌即_保在清理所依賴的事物(例如sys.meta_path)仍處于定義/尚未釋放狀態(tài)時(shí)完成清理,例如:
try:
del env
except ImportError:
pass
和
env = gym.make('CartPole-v0')
...
env.env.close()
和(可能,但效率或清晰得多)
import gc; gc.collect()
添加回答
舉報(bào)