Как запустить подпроцесс в фоновом режиме python [дубликат]

этот вопрос уже есть ответ здесь:

Я пишу приложение на python, которое инициирует JVM в java, вызывая сценарий оболочки с помощью подпроцесса python. Однако моя проблема в том, что правильный способ, которым я это написал, JVM начинается и блокирует остальные процессы, которые происходят после него. Мне нужно, чтобы JVM запускался во время вызова другой функции, и мне нужно остановить JVM после завершения процесса.

Python-кода:

process = subprocess.Popen('runJVM.sh', shell=True, stderr=subprocess.STDOUT)
process.wait()

r = Recommender()
r.load()
assert len(sys.argv) > 1, '%d arguments supplied, one needed' %(len(sys.argv)-1)
print "recommendations" + str(r.get_users_recommendation(sys.argv[1:]))

....
def get_users_recommendation(self, user_list):
    j_id_list = ListConverter().convert(class_list, self.gateway._gateway_client)
    recs = self.gateway.entry_point.recommend(j_id_list)
    return recs

где:

 from py4j.java_gateway import JavaGateway
 self.gateway = JavaGateway()

Я не могу get_user_recommendations для запуска, потому что сервер JVM блокирует процесс. Как я не могу заблокировать остальную часть скрипта Python, а затем убить его, как только методы python закончат работу и вернут значение? Много спасибо.

1 ответов


process.wait() блокирует процесс. Удалите эту строку,и код будет запущен. Тогда вы можете сделать это, позвонив Popen.terminate()

к popen-это вызов является CreateProcess, это означает, что ОС запускает новый процесс и возвращает PID для хранения на вашем