OpenAI Gym调用env.close()后CartPole窗口无法关闭且冻结求助
CartPole-v1 pygame窗口冻结无法关闭问题解决
运行CartPole-v1代码时,调用
env.close()后pygame窗口无法关闭且出现冻结,手动关闭窗口会导致内核重启。代码如下:env = gym.make("CartPole-v1", render_mode = "human") episodes = 5 for episode in range(1, episodes+1): state = env.reset() done = False score = 0 while not done: env.render() action = env.action_space.sample() n_state, reward, done,truncated, info = env.step(action) score += reward print("Episode:{} Score: {}".format(episode, score)) env.close()已尝试在不同单元格声明env、卸载重装相关包,问题仍存在。
以下是几个可行的解决方法:
移除重复的
env.render()调用
若使用的是Gymnasium(新版OpenAI Gym),当render_mode="human"时,env.step()会自动渲染画面,循环内手动调用env.render()会造成重复渲染,引发窗口资源冲突。修改后代码:env = gym.make("CartPole-v1", render_mode = "human") episodes = 5 for episode in range(1, episodes+1): state = env.reset() done = False score = 0 while not done: # 移除此处的env.render() action = env.action_space.sample() n_state, reward, done, truncated, info = env.step(action) score += reward print("Episode:{} Score: {}".format(episode, score)) env.close()强制清理pygame资源
部分场景下env.close()无法彻底释放pygame窗口资源,可手动调用pygame退出方法兜底:import pygame # 原有代码逻辑... env.close() pygame.quit() # 强制关闭pygame所有关联资源避免在Jupyter Notebook中运行GUI代码
Jupyter内核与GUI应用的交互存在兼容性问题,极易引发窗口冻结、内核崩溃。建议将代码保存为.py脚本,在终端/命令行中直接执行。切换至官方维护的Gymnasium版本
旧版OpenAI Gym已停止维护,部分渲染逻辑存在遗留bug。卸载旧版gym后安装官方维护的Gymnasium:pip uninstall gym -y pip install gymnasium[classic-control]代码中导入方式改为
import gymnasium as gym。
内容的提问来源于stack exchange,提问作者Yigit Kaya
相关产品推荐
相关产品推荐

