Запустите длительный процесс, используя модуль подпроцесса - PullRequest
0 голосов
/ 24 января 2011

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

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

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

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

Спасибо.

Редактировать: вот код, проясняющий мой вопрос:

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, когда процесс, выполняющий цикл while, достигает строки break. Это возможно?

1 Ответ

0 голосов
/ 24 января 2011

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

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

Вы можете получить некоторые подсказки из Отключение подпроцесса, запущенного с использованием многопроцессорного модуля python

...