You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 02:33:22