多处理:主进程未终止

时间:2018-05-26 23:59:06

标签: python python-multiprocessing child-process zombie-process

我有这段代码:

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,因为当我添加一个而True 循环在最后打印东西然后杀死这个人时,它停止打印这个东西(但继续打印)并继续播放歌曲

我的目标是让歌曲保持活动,而没有其他任何东西在运行。主要继续作为僵尸不是我想要的。

can kill it manually,这首歌会一直播放,但那不是那种方式。

所以,问题是:为什么主进程到达终点时仍然存活?一旦我除以零,但尽管如此,它仍然像僵尸一样:Picture

1 个答案:

答案 0 :(得分:0)

Python的multiprocessing总是等待孩子完成。但subprocess.Popen()没有。但是,subprocess.Popen()启动任何新程序,不一定是Python程序,并且不直接调用Python函数。您可以执行Popen(['python', __file__, '--child'])之类的操作并实施您的脚本,以便sys.argv包含--child时(提示:使用argparse),它只会调用lul()。< / p>

然而,没有必要这样做 - 你的最终目标似乎是lul()在Python解释器中运行,并且没有额外的Python解释器。因此,不要首先启动第二个解释器 - 只需调用lul()并完成它。