【问题标题】:Multiprocessing: main process is not terminated [duplicate]多处理:主进程未终止[重复]
【发布时间】:2018-11-05 23:02:23
【问题描述】:

我有这个代码:

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

【问题讨论】:

  • multiprocessing terminate process 上有 428 个问题,这肯定是重复的。请关闭
  • 你只是想非阻塞分叉一个子进程?还是从 __main__() 调用 lul()?要不然是啥?最好告诉我们您真正想要做什么,而不仅仅是抱怨代码没有做到这一点。
  • @smci 冷静的人,我找不到类似的问题(主要是因为我的英语词汇量很小,但我正在努力),再加上 Zwinck 先生 - 专业通灵师 - 已经给了我很好的答案。如何关闭问题?如果是通过选择最佳答案来完成,那么我已经完成了。
  • asdfadf 没关系,它已经作为重复关闭了。 (这与接受答案不同)。无论如何,我发布了因为已经有数百个关于这个和类似主题的问题。虽然他们的标题和可查找性不是很​​好,但未来可以改进。

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


【解决方案1】:

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

然而,没有必要做任何这些——你的最终目标似乎是lul() 在 Python 解释器中运行,并且没有额外的 Python 解释器。所以不要一开始就启动第二个解释器——只需调用lul()就可以了。

【讨论】:

  • 我推荐sys.executable作为要执行的命令。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 1970-01-01
  • 2021-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多