如何在后台python中运行子进程

 fuotb_204 发布于 2023-02-13 18:38

我正在python中编写一个应用程序,它通过使用python子进程调用shell脚本来启动java中的JVM.但是,我的问题是我编写的正确方法,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 .

    如果你使用process.wait(),那么你的代码将等到最近创建的进程结束(在这种情况下它永远不会结束,除非你在外部终止它).

    如果您不打电话process.wait(),您的代码将继续执行.但你仍然可以控制其他过程,你可以做process.terminate()甚至process.kill()必要的事情.

    2023-02-13 18:42 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有