当前位置:   article > 正文

spring boot 项目实现调用python工程的方法

spring boot 项目实现调用python工程的方法

在 Spring Boot 中调用 Python 脚本或工程,主要有以下几种方式:

1. 使用 ProcessBuilderRuntime 执行 Python 脚本

这是最直接的方法,使用 Java 的 ProcessBuilderRuntime.getRuntime().exec() 来执行 Python 脚本。

  • 优点:实现简单,无需额外依赖。
  • 缺点:处理输出和错误流可能较为繁琐,性能上不如直接在 JVM 内运行。
package com.oncloudsoft.zbznhc.ajpc.service;

import org.springframework.stereotype.Service;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

@Service
public class PythonScriptService {

	public String runPythonScript(String propertyJson) {
		try {
			ProcessBuilder processBuilder = new ProcessBuilder("python", "/home/sunyuhua/workspace/shbgit/zb-znhc/src/main/resources/python/identify_property.py", propertyJson);
			Process process = processBuilder.start();

			BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
			String line;
			StringBuilder output = new StringBuilder();
			while ((line = reader.readLine()) != null) {
				output.append(line);
			}

			int exitCode = process.waitFor();
			if (exitCode != 0) {
				// 处理非零退出代码
				return "Error executing script";
			}

			return output.toString();
		} catch (IOException | InterruptedException e) {
			e.printStackTrace();
			return "Error: " + e.getMessage();
		}
	}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

2. Jython

Jython 是一个 Python 的 Java 实现,可以让你直接在 Java 虚拟机上运行 Python 代码。

  • 优点:可以直接在 Java 代码中运行 Python 脚本,无需创建额外的进程。
  • 缺点:Jython 只支持 Python 2.x,且不支持所有 Python 库。

3. 使用 Web 服务

将 Python 脚本或应用封装为一个 Web 服务,然后通过 HTTP 请求进行交互。

  • 优点:解耦合,Python 和 Java 应用可以独立部署和扩展。
  • 缺点:需要处理 HTTP 请求和响应,增加了网络通信的开销。

4. 使用消息队列

通过消息队列(如 RabbitMQ、Kafka)在 Java 和 Python 之间进行异步通信。

  • 优点:支持高并发,解耦合。
  • 缺点:增加了系统复杂性,需要维护消息队列。

5. 使用 gRPC 或 Thrift

使用 gRPC 或 Apache Thrift 进行跨语言的 RPC(远程过程调用)。

  • 优点:强类型,高效,适用于复杂的交互。
  • 缺点:需要定义和维护接口规范,实现相对复杂。

选择合适的方法

选择哪种方法取决于你的具体需求。对于简单的任务,直接使用 ProcessBuilderRuntime 可能就足够了。如果你的 Python 代码和 Java 代码需要频繁和紧密地交互,可能需要考虑 Jython(如果 Python 代码兼容 Python 2.x),或者实现一个 Web 服务。如果你的应用需要高并发处理能力,消息队列或 gRPC/Thrift 可能是更好的选择。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/201109
推荐阅读
相关标签
  

闽ICP备14008679号