繁体   English   中英

流程未终止

[英]Process not terminating

我正在尝试通过使用多处理库创建一个进程在后台运行所有mp3文件。

import os
import subprocess
from multiprocessing import Process

def music_player():

    music_folder = "/home/pi/Music/"
    files = os.listdir(music_folder)
    for mp3_file in files:
        print("playing " + mp3_file)
        p = subprocess.Popen(["omxplayer","-o","local",music_folder+mp3_file],
                          stdout = subprocess.PIPE,
                          stdin = subprocess.PIPE,
                          stderr = subprocess.PIPE)
        print(p)
        print(p.poll())
        print(p.pid)
        p.wait()



p = Process(target = music_player)
print(p, p.is_alive())
p.start()
print(p.pid)
print(p, p.is_alive())
command = raw_input()
if(command == "stop"):
    print("terminating...")
    p.terminate()
    print(p, p.is_alive())
    print(p.exitcode)  

输入“停止”命令后,代码退出,但音乐仍在运行,并且在执行ps我看到omxplayer的2个进程,然后必须通过kill <pid>手动将其停止,以使音乐停止。

我以前尝试使用子进程库,并使用kill() and terminate()进程kill() and terminate()但是发生了相同的问题。

首先观察,您不需要在这里执行多处理模块。 子流程用于创建和管理将运行其他脚本和程序的流程; 多重处理用于创建和管理将调用您(父)脚本内部的代码的进程。

我怀疑您看到缓冲的效果。 在您终止此过程时,它已经将大量音乐缓冲到硬件(甚至设备的OS缓冲区)中。

如果从外壳启动同一程序omxplayer ,但在后台启动(会在Unix Shell命令行末尾以标记将程序推入后台),会发生什么情况。 然后在该进程上使用kill命令,看看是否看到相同的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM