0

我正在使用 py4j 从 Java 到 Python 进行通信。我将下面的 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();
  }
4

1 回答 1

0

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

  1. 并发请求数。Py4J在服务器端根据需要创建尽可能多的线程,但尽可能重用它们。例如,如果您有 10 个 Java 线程同时调用 Python,Py4J 最终可能会在 Python 端创建 10 个线程。另一个方向也是如此。
  2. Java 和 Python 之间的递归深度。Py4J 使用的常规线程模型将为Java 和Python 之间的每个递归级别创建一个新线程(例如,Java 调用Python 调用Java 调用Python)。您可以使用固定线程模型来确保只创建一个线程。

有关 Java 和 Python 代码之间交互的更多详细信息将明确有助于解决正在发生的事情。

于 2017-04-25T22:13:32.910 回答