Python: простой подход к уничтожению детей или сообщению об их успехе?

Я хочу

  1. назовите команды оболочки (например, 'сон' ниже) параллельно,
  2. отчет об их человеке запускается и завершения и
  3. смогите уничтожить их с, 'уничтожают-9 parent_process_pid'.

Уже существует уже много записан на этих видах вещей, но я чувствую, что не вполне нашел изящное pythonic решение, которое я ищу. Я также пытаюсь сохранить вещи относительно читаемыми (и короткий) для кого-то абсолютно незнакомый с Python.

Мой подход до сих пор (см. код ниже) был:

  1. помещенный subprocess.call (unix_command) в функции обертки, которая сообщает о запуске и завершении команды.
  2. вызовите функцию обертки с мультипроцессом. Процесс.
  3. отследите соответствующий pids, сохраните их глобально и уничтожьте их в signal_handler.

Я старался избегать решения, которое периодически опрашивало процессы, но я не уверен почему.

Существует ли лучший подход?

import subprocess,multiprocessing,signal
import sys,os,time

def sigterm_handler(signal, frame):
        print 'You killed me!'
        for p in pids:
                os.kill(p,9)
        sys.exit(0)

def sigint_handler(signal, frame):
        print 'You pressed Ctrl+C!'
        sys.exit(0)

signal.signal(signal.SIGINT, sigint_handler)
signal.signal(signal.SIGTERM, sigterm_handler)

def f_wrapper(d):
        print str(d) + " start"
        p=subprocess.call(["sleep","100"])
        pids.append(p.pid)
        print str(d) + " done"

print "Starting to run things."

pids=[]

for i in range(5):
        p=multiprocessing.Process(target=f_wrapper,args=(i,))
        p.daemon=True
        p.start()

print "Got things running ..."

while pids:
        print "Still working ..."
        time.sleep(1)
5
задан mathtick 3 August 2010 в 17:54
поделиться