【发布时间】:2017-08-01 04:36:23
【问题描述】:
这是简化的示例。我有这个代码:
from pygame import mixer
def say():
mixer.init()
mixer.music.load('/home/orif/Downloads/english.wav')
mixer.music.play()
while mixer.music.get_busy():
time.sleep(0.2)
它会显示一些警告,但运行良好。警告:
ALSA lib pcm_dsnoop.c:606:(snd_pcm_dsnoop_open) 无法打开从站 ALSA lib pcm_dmix.c:1029:(snd_pcm_dmix_open) 无法打开从属 ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) 未知 PCM 卡.pcm.rear ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) 未知 PCM cards.pcm.center_lfe ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) 未知 PCM 卡.pcm.side ALSA 库 pcm_dmix.c:1029:(snd_pcm_dmix_open) 无法打开从站
但是如果我在子进程中运行它就不会:
def test():
talk_process = Process(target=say)
talk_process.start()
print 'waiting for the process...'
talk_process.join()
print 'done'
它会打印相同的警告,然后:
waiting for the process...
Process Process-1:
Traceback (most recent call last):
File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
self._target(*self._args, **self._kwargs)
File "/home/orif/Projects/example.py", line 178, in say
mixer.init()
error: No available audio device
done
如果我做同样的事情但使用线程,它运行良好。我已经尝试过here 和here 所写的内容。在前一个链接中,cmets 中的解决方案几乎帮助了我。我在运行子进程之前初始化了混音器:
mixer.init()
talk_process.start()
但是现在声音不播放了,等待循环while mixer.music.get_busy()是没完没了
发生了什么以及如何解决?
【问题讨论】:
标签: python-2.7 pygame python-multiprocessing