首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何停止Python运行Py4J ClientServer

如何停止Python运行Py4J ClientServer
EN

Stack Overflow用户
提问于 2019-05-28 20:32:00
回答 1查看 287关注 0票数 3

我有一个Java main(),它启动一个或多个Py4J、ClientServer和python实例来连接回ClientServer (它们都使用不同的端口集)。这是可行的,但是当main完成时,Java和python实例都不会退出

我将启动ClientServer,如下所示:

代码语言:javascript
复制
clientServer = new ClientServer(javaPort, GatewayServer.defaultAddress(), pythonPort,
    GatewayServer.defaultAddress(), GatewayServer.DEFAULT_CONNECT_TIMEOUT,
    GatewayServer.DEFAULT_READ_TIMEOUT, ServerSocketFactory.getDefault(), 
    SocketFactory.getDefault(), jep); 

传入两个端口,启动python,如下所示:

代码语言:javascript
复制
python_classifier.gateway = ClientServer(
    java_parameters=JavaParameters(port=javaPort, auto_convert=True, auto_close=True),
    python_parameters=PythonParameters(port=pythonPort, daemonize=False,
         daemonize_connections=True),
    python_server_entry_point=python_classifier)

我曾尝试设置deamonize=True,但随后连接开始失败。我还添加了一个Java shutdown钩子来尝试终止我启动的python进程,但它并不总是被调用。

那么,对于如何让python在Java端退出时安静地退出,有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2019-05-28 23:20:14

我有很多关于管理从Java开始的python进程的代码,包括shutdownHooks、finalizers()和超时使用监听器。主要问题是,对于给定的ClientServer/进程对,在交换顺序并首先终止进程之后,我在调用Process.destroyForcibly()之前调用了ClientServer.shutdown(),shutdown()在close()中不再挂起(见下文)。

如果套接字没有先关闭,Py4J java代码中有一条关于readLine()中挂起的读取器的注释。尽管该套接字首先被关闭,但它似乎仍处于挂起状态。下面的堆栈跟踪来自Finalizer线程,但我也在自己的线程中获得了这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56342374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档