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

在WSL运行VizDoom与PyTorch程序时遭遇多进程锁错误

解决WSL环境下VizDoom运行的两个关键问题

先帮你拆解下遇到的两个核心错误,一步步来解决:

1. 处理Pulseaudio音频服务断言错误

日志里的Assertion 'pthread_mutex_unlock(&m->mutex) == 0' failed at pulsecore/mutex-posix.c:108是WSL老版本(比如你用的Ubuntu14)里的常见音频兼容问题——VizDoom启动时会尝试初始化音频,但WSL的音频服务在这类旧环境里稳定性很差。

最直接的解决方式是禁用VizDoom的音频输出,在环境初始化代码里添加配置:

import gym

# 初始化环境时关闭音频
env = gym.make('ppaquette/DoomCorridor-v0')
env.unwrapped.doom_config.set_audio_enabled(False)
env.reset()

如果还是出现音频相关报错,可以在WSL终端先设置环境变量,强制调用Windows端的音频服务(前提是Windows已安装Pulseaudio):

export PULSE_SERVER=tcp:localhost:4713

2. 修复VizDoom多进程锁缺失问题

错误日志里已经给出了明确的解决方向,结合你的代码场景,推荐两种实操方案:

方法一:提前缓存单例锁(适合单进程训练)

在你的主代码(比如ai.py)最开头,先创建一个临时VizDoom环境并立即关闭,这样会在内存中缓存单例锁,后续正式环境初始化就不会报错:

import gym

# 提前初始化临时环境,缓存多进程锁后关闭
temp_env = gym.make('ppaquette/DoomCorridor-v0')
temp_env.unwrapped.doom_config.set_audio_enabled(False)  # 同时禁用音频
temp_env.close()

# 初始化正式训练环境
env = gym.make('ppaquette/DoomCorridor-v0')
# 后续训练逻辑...

方法二:手动传递多进程锁(适合多进程训练)

如果你的代码用到了多进程并行训练,可以手动创建锁并传递给VizDoom配置:

import gym
import multiprocessing

# 创建多进程锁
lock = multiprocessing.Lock()
env = gym.make('ppaquette/DoomCorridor-v0')
env.unwrapped.doom_config.set_audio_enabled(False)
env.unwrapped.configure(lock=lock)  # 传递锁给环境
env.reset()

额外环境建议

你当前用的Ubuntu14和Python2.7都已停止官方维护,后续可能还会遇到更多兼容性问题。如果条件允许,建议升级到Ubuntu18.04+和Python3.6+,PyTorch和VizDoom对新版本的支持会更完善。

内容的提问来源于stack exchange,提问作者Abbas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:01:09