2011-01-24 4 views
0

Я пытаюсь запустить процесс Java, который должен длиться долго, используя модуль subprocess python.Начать длительный процесс с использованием модуля подпроцесса

Что я на самом деле делаю, используя модуль multiprocessing, чтобы начать новый процесс, и используя этот процесс, используйте модуль subprocess для запуска java -jar.

Это хорошо работает, но когда я запускаю новый процесс, процесс java заменяет процесс python, выполняющий python Process. Я хотел бы, чтобы java выполнялся как дочерний процесс таким образом, что когда процесс, который запустил новый multiprocessing.Process, умер, процесс, запущенный java, тоже погибнет.

Возможно ли это?

Спасибо.

Edit: Вот код, чтобы прояснить мой вопрос:

def run_task(): 
    pargs = ["java -jar app.jar"] 
    p = Popen(pargs) 
    p.communicate()[0] 
    return p 

while(True): 
    a = a_blocking_call() 

    process = Process(target=run_task) 
    process.start() 

    if not a: 
     break 

Я хочу, чтобы этот процесс работает run_task быть убит вместе с процессом работает java, когда процесс выполнения время цикла достигает break линии. Это возможно?

+0

Может быть, я неправильно понял вопрос, но зачем вам нужен 'multiprocessing' модуль? Вы можете запускать дочерние процессы только с помощью функций 'subprocess'. – Philipp

+0

Мне нужно запустить новый процесс, а затем продолжить цикл while для запуска новых процессов. – simao

ответ

0

Я думаю, вы должны показать какой-то код, неясно, как вы используете подпроцесс и многопроцессорность вместе.

Из документации выглядит, что подпроцесс должен появляться и не заменять новый процесс Process-started. Вы уверены, что этого не происходит? Тестовый пример, показывающий это, не будет хорошим.

Вы можете получить некоторые подсказки из Detach a subprocess started using python multiprocessing module