2
我正在Raspberry Pi上編寫一個異步視頻播放程序。我需要在子進程中運行omxplayer並在主進程中接收輸入。當收到一些輸入時,主進程會將信號發送到子進程。信號處理程序不能在Python中工作
這裏是我的代碼:
def worker():
p = subprocess.Popen(['omxplayer', '1.mov'], stdin = subprocess.PIPE)
def handler(signum, frame):
print p.pid
p.stdin.write('q') # keystroke of 'q' will quit omxplayer FYI
signal.signal(signal.SIGUSR1, handler) # can only be trigger in code
到目前爲止,似乎罰款。我可以運行worker()並在代碼片段中發送SIGUSR1,並且它工作正常。像這樣:
def test():
worker()
time.sleep(5)
os.kill(int(os.getpid()), signal.SIGUSR1)
但是當我嘗試啓動worker作爲多進程時,似乎進程無法接收到信號。
def main_process():
w = multiprocessing.Process(target=worker)
w.start()
time.sleep(5)
os.kill(w.pid, signal.SIGUSR1)
處理程序不會以這種方式調用。哪部分可能是錯誤的?信號沒有收到,或者綁定不正確?
我覺得os.kill沒有按照我的想法工作。信號根本沒有收到。如何解決這個問題?
Thx很多!這正是我需要的。 – alvinzoo
還有一個問題,當子流程完成後,我應該如何結束工作進程?視頻結束後,我需要打開while循環。 – alvinzoo
而p.returncode爲無:... https://docs.python.org/2/library/subprocess.html#subprocess.Popen.returncode – noxdafox