java程序调用 python执行(总结)

最近调研一个需求,需要一个java程序去执行python脚本。原因是因为sql语句大量涉及到不同数据库、同类型不同库等操作,又需要根据地址去路由执行,所以需要执行一些python脚本文件。进行了一些需求调研。

 

大概分为两类:本地化调用, 工程式调用。

 

本地化调用:

1 本地化调用 

jython

 

1 、jython可以直接执行简单python脚本,比如这样

 

 

 

限制:

1 不支持python3 语法

2 复杂如pandas引入不了

 

2 、Process式调用:

 

 

 

 

 

限制:

1 只能读print控制台信息

2 复杂库引入困难,整体解析效率不高

 

3、jep调用:

 

 

 

优势:

1 直接通过协成组件维护

2 调用效率不错

劣势:

1 直接相当于native方法调用python,工程整合化了一下。需要从github上down源码,打成jar依赖进maven,然后执行调用,操作较为复杂


2.2 rpc调用:
java服务作为消费者调用python服务生产者 Thrift (推荐)
--Thrift实现跨语言调用

Thrift最初由Facebook研发,主要用于各个服务之间的RPC通信,支持跨语言,常用的语言比如C++, Java, Python,PHP, Ruby, Erlang,Perl,Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml都支持。

Thrift是一个典型的CS(客户端/服务端)结构,客户端和服务端可以使用不同的语言开发。既然客户端和服务端能使用不同的语言开发,那么一定就要有一种中间语言来关联客户端和服务端的语言,这种语言就是IDL (Interface Description Language)。

 

如:

java 消费者:

 

 

 

 

python消费者:

 

 

 

java生产者:

 

 

 

 

 

 

 

 


python生产者:

 

 

 

 

 

 

 

 

优势:

1 自动生成java、python代码,只需要定义传输对象,支持所有java和python数据类型

2 采用rpc通讯,协议占用率小,稳定可靠

3 模块独立,调用双方互不影响。方法独立,比如python直接写一个调用service就可以统筹所有调用入口了

 

劣势:

1 需要开发生产者消费者代码

2.3 http调用
基于restful,将python工程web化,直接通过http进行访问。

 

posted @ 2020-11-26 20:58  kirsSun  阅读(724)  评论(0)    收藏  举报