Windows下PyCharm多进程调用playsound无声音问题及解决方法
问题描述
- 在PyCharm中启动程序时,使用
multiprocessing启动独立进程调用playsound无法播放音频,但命令行启动正常 - 尝试多进程调用
playsound的方案后,进程状态p.is_alive()返回True,但无声音输出 - 若在
p.start()后调用p.join(),音频可正常播放,但会阻塞主进程,不符合独立进程的需求 - 调整
playsound的block参数(block=True/False)、修改进程启动位置(在main()中启动进程)均无效 - 在
p.start()后主动抛出BaseException时能播放声音,但按Enter让程序正常退出时仍无声音
测试代码如下:
import multiprocessing from playsound import playsound def use_playsound(audio_file): p = multiprocessing.Process(target=playsound, args=(audio_file,)) p.start() print(p.is_alive()) input("press ENTER to stop playback") p.terminate() def main(): use_playsound("test.mp3") if __name__ == '__main__': main()
解决方案
方案1:修改PyCharm运行配置
PyCharm默认运行配置可能限制子进程的资源访问,调整步骤如下:
- 打开PyCharm的「Run/Debug Configurations」
- 找到当前运行的配置,勾选「Emulate terminal in output console」选项
- 重新运行程序,子进程音频输出即可正常工作
方案2:改用线程替代多进程
playsound本身是阻塞式调用,用线程而非多进程可避开PyCharm的子进程限制,同时实现非阻塞播放:
import threading from playsound import playsound def use_playsound(audio_file): t = threading.Thread(target=playsound, args=(audio_file,)) t.daemon = True # 主线程退出时自动终止线程 t.start() print(t.is_alive()) input("press ENTER to stop playback") def main(): use_playsound("test.mp3") if __name__ == '__main__': main()
方案3:指定playsound音频后端
部分场景下,PyCharm环境中playsound默认后端无法正常工作,可手动指定后端(以Windows平台为例):
import multiprocessing from playsound import playsound def use_playsound(audio_file): # 指定使用winmm后端(Windows平台) p = multiprocessing.Process(target=playsound, args=(audio_file,), kwargs={"backend": "winmm"}) p.start() print(p.is_alive()) input("press ENTER to stop playback") p.terminate() def main(): use_playsound("test.mp3") if __name__ == '__main__': main()
内容的提问来源于stack exchange,提问作者Groaillion
相关产品推荐
相关产品推荐

