2

如果运行 py4j 的 JVM 正在侦听所选(可能是默认)套接字,那么测试(在 python 脚本中)的好方法是什么?类似智能的东西ping

我可以尝试从我的 Java 类访问方法或对象并捕获产生的socket.error异常,但这似乎有点像 hack。

在没有任何 JVM 的情况下创建一个 pythonJavaGateway实例不会引发异常。我可能错过了一些东西,但我没有在docs中找到任何东西。

4

1 回答 1

6

Py4J 没有运行状况检查、ping 或版本命令,因此测试 Py4J 是否正在侦听的仅有三个选项是:

  1. 尝试连接到套接字。此方法并不完美,因为另一个服务器程序可能正在侦听默认端口。

  2. 尝试加载 JavaGateway(将在 0.8 版本中可用。现在仅在 github 上的 master 分支中可用):

    from py4j.java_gateway import JavaGateway, Py4JNetworkError
    try:
        java_gateway = JavaGateway(eager_load=True)    
        print("JVM accepting connection")
    except Py4JNetworkError:
        print("No JVM listening")
    except Exception:
        print("Another type of problem... maybe with the JVM")
    
  3. 在 Py4J 0.7 中,尝试调用一个基本的 System 方法:

    from py4j.java_gateway import JavaGateway, Py4JNetworkError
    
    java_gateway = JavaGateway()    
    try:
        java_gateway.jvm.System.getProperty("java.runtime.name")
        print("JVM accepting connection")
    except Py4JNetworkError:
        print("No JVM listening")
    except Exception:
        print("Another type of problem... maybe with the JVM")
    

欢迎提出功能要求

于 2013-06-14T08:34:18.847 回答