簡體   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