Как запустить подпроцесс в фоновом режиме python [дубликат]
этот вопрос уже есть ответ здесь:
- как запустить фоновый процесс в Python? 6 ответов
Я пишу приложение на 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 для хранения на вашем