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进行访问。
                    
                
                
            
        
浙公网安备 33010602011771号