在Python中暂停进程或线程

时间:2012-07-17 13:09:54

标签: python multithreading process

我创建了一个小型音频播放器,可以在我指定的网站上查找有声读物的章节,下载并播放。唯一的问题是,我无法暂停它。要播放mp3文件我使用os.system("afplay chapter.mp3")

我已经考虑过使用os.system电话创建一个主题,但我很确定我无法以这种方式暂停。如果线程是一个循环,我可以锁定一个它需要访问的变量,并在我准备好恢复时解锁。但是,由于这个线程只是一行似乎不可能的代码。我还考虑过创建一个流程并向其发送SIGSTOP。但由于某些未知的原因,它不会起作用。

import os, signal
from multiprocessing import Process

p = Process(target=play)
p.start()
raw_input("press enter to pause: ")
os.kill(p.pid, signal.SIGSTOP)

代码只是静默执行而不会停止进程。

我知道有替代品可以播放但是现在我只是坚持使用os.system调用。所以我的问题是,如何暂停一行线程或进程?而不是使用Process()调用创建新进程,我是否需要找到afplay的进程ID?如果是这样的话?

2 个答案:

答案 0 :(得分:1)

os.system创建子进程并等待该子进程退出。您可以使用os.execv将流程替换为其他程序,或使用subprocess.Popen创建一个子流程,您可以使用Popen.pid找到该流程。

答案 1 :(得分:0)

为什么不直接使用子进程模块而不是subprocess和os.system?这应该可以让您更好地控制衍生过程。