py4j打开了太多线程

时间:2017-04-25 05:40:31

标签: java python multithreading server py4j

我正在使用py4j从Java进行通信。 我将下面的Java代码打包到Jar中,然后运行命令java -jar file.jar 但是看一下它我可以看到这个命令在不同的线程中运行大约30次,尽管我调用了一次。我怀疑它发生是因为py4j的实现方式。 如何设置py4j使用的线程数的最大值? 我可以使用Java和python之间的哪些通信内存会更低?

public static void main(String[] args) {
    final GroupTerms groupTerms = new GroupTerms();
    new GatewayServer(groupTerms).start();
  }

1 个答案:

答案 0 :(得分:0)

问题在于细节。以下是影响Py4J创建的线程数的两个主要因素:

  1. 并发请求数。 Py4J在服务器端根据需要创建了多个线程 ,但尝试在可能的情况下重用它们。例如,如果你有10个Java线程同时调用Python,Py4J最终可能会在Python端创建10个线程。对于另一个方向也是如此。
  2. Java和Python之间的递归深度。 Py4J使用的常规线程模型将为Java和Python之间的每个递归级别创建一个新线程(例如,Java调用调用Python的Java调用Python)。您可以使用pinned-thread model来确保只创建一个线程。
  3. 有关Java和Python代码之间交互的更多详细信息将最终帮助解决正在发生的事情。