多处理:主进程未终止
Multiprocessing: main process is not terminated
我有这个代码:
import vlc
from time import sleep
from multiprocessing import Process
def lul():
song = vlc.MediaPlayer("Himeringo - Shinitai-chan.mp3")
song.audio_set_volume(50)
song.play()
sleep(5)
while song.is_playing():
print('&')
sleep(5)
if __name__ == '__main__':
k = Process(target=lul)
k.daemon = False
k.start()
当我执行它时,主进程保持 运行:
Picture
我确定突出显示的那个人是 main
,因为当我添加一个 while True 循环在最后打印东西然后杀死这个人时,它停止打印这些东西(但继续打印 &s)并继续播放歌曲
我的目标是让歌曲的进程保持活跃,而没有其他任何东西 运行。而主要继续僵尸不是我想要的
我can kill it manually,歌曲会一直播放,但不是这样的。
所以,问题是:为什么主进程在到达终点线时还保持活动状态?一旦我除以零,但尽管如此,它仍然像僵尸一样继续:Picture
Python 的 multiprocessing
总是等待 child 完成。但是 subprocess.Popen()
没有。但是,subprocess.Popen()
会启动任何新程序,不一定是 Python 程序,并且不会直接调用 Python 函数。你可以做类似 Popen(['python', __file__, '--child'])
的事情并实现你的脚本,这样当 sys.argv
包含 --child
时(提示:使用 argparse
),它只会调用 lul()
.
然而,没有必要做任何这些——你的最终目标似乎是 lul()
在 Python 解释器中运行,并且没有额外的 Python 解释器遗迹。所以不要一开始就启动第二个解释器——只需调用 lul()
就可以了。
我有这个代码:
import vlc
from time import sleep
from multiprocessing import Process
def lul():
song = vlc.MediaPlayer("Himeringo - Shinitai-chan.mp3")
song.audio_set_volume(50)
song.play()
sleep(5)
while song.is_playing():
print('&')
sleep(5)
if __name__ == '__main__':
k = Process(target=lul)
k.daemon = False
k.start()
当我执行它时,主进程保持 运行: Picture
我确定突出显示的那个人是 main
,因为当我添加一个 while True 循环在最后打印东西然后杀死这个人时,它停止打印这些东西(但继续打印 &s)并继续播放歌曲
我的目标是让歌曲的进程保持活跃,而没有其他任何东西 运行。而主要继续僵尸不是我想要的
我can kill it manually,歌曲会一直播放,但不是这样的。
所以,问题是:为什么主进程在到达终点线时还保持活动状态?一旦我除以零,但尽管如此,它仍然像僵尸一样继续:Picture
Python 的 multiprocessing
总是等待 child 完成。但是 subprocess.Popen()
没有。但是,subprocess.Popen()
会启动任何新程序,不一定是 Python 程序,并且不会直接调用 Python 函数。你可以做类似 Popen(['python', __file__, '--child'])
的事情并实现你的脚本,这样当 sys.argv
包含 --child
时(提示:使用 argparse
),它只会调用 lul()
.
然而,没有必要做任何这些——你的最终目标似乎是 lul()
在 Python 解释器中运行,并且没有额外的 Python 解释器遗迹。所以不要一开始就启动第二个解释器——只需调用 lul()
就可以了。