请问 Java 调用 Python 有什么成熟的方案吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Kontinue
V2EX    程序员

请问 Java 调用 Python 有什么成熟的方案吗

  Kontinue 2019-07-30 13:12:14 +08:00 5414 次点击
这是一个创建于 2266 天前的主题,其中的信息可能已经有所发展或是发生改变。

目前,深度学习都是用 python 写的,基础模型训练好之后,需要包成服务的形式去提供给客户。目前服务这边用的是 spring boot。但是找了一圈基本上没发现成熟的调用方法,jython 也很久没更新了。请问有什么好的解决方案吗?

25 条回复    2023-03-23 11:34:37 +08:00
zhuangzhuang1988
    1
zhuangzhuang1988  
   2019-07-30 13:18:46 +08:00
看下 spark 用的啥和 python 交互的?!
reus
    2
reus  
   2019-07-30 13:20:01 +08:00
jni 啊,还能怎样

jni -> C -> python C api -> python
kaedea
    3
kaedea  
   2019-07-30 13:20:28 +08:00 via Android
命令行调用,args 传参,stdout 返回
wenzhoou
    4
wenzhoou  
   2019-07-30 13:20:39 +08:00 via Android
http 吧
oblivion
    5
oblivion  
   2019-07-30 13:27:20 +08:00
https://github.com/keijack/python-eureka-client

我司目前是做成微服务,注册到 Eureka,Spring Boot 这边直接 Feign 调用的
jingxyy
    6
jingxyy  
   2019-07-30 13:28:32 +08:00
走 rpc 吧
lihongjie0209
    7
lihongjie0209  
   2019-07-30 13:32:04 +08:00
rpc http mq 选一个
shidenggui
    8
shidenggui  
   2019-07-30 13:33:06 +08:00
Python 调用 Java 有个 jpype 挺方便的,反过来就不清楚了。rpc 或者 http 应该是比较方便的吧。
nnnToTnnn
    9
nnnToTnnn  
   2019-07-30 13:33:11 +08:00
rpc
Kontinue
    10
Kontinue  
OP
   2019-07-30 13:38:04 +08:00
@reus 目前暂时就是这么在做的
reus
    11
reus  
   2019-07-30 13:48:48 +08:00
@Kontinue 这些都很成熟的了
ioiogoo
    12
ioiogoo  
   2019-07-30 13:59:08 +08:00
如果只是用 Python 训练模型,Java 调用模型预测的话,可以考虑直接用 Java 加载模型完成预测过程,也就是个解析模型,然后根据模型参数运算的过程。
如果是想用 Java 调用 TensorFlow、Keras 等训练之后的模型,可以参考文章: https://www.ioiogoo.cn/2018/04/03/java%e8%b0%83%e7%94%a8keras%e3%80%81tensorflow%e6%a8%a1%e5%9e%8b/
wzwwzw
    13
wzwwzw  
   2019-07-30 14:05:45 +08:00
走 RPC 或者 HTTP 吧,命令性调用也行。
STRRL
    14
STRRL  
   2019-07-30 14:17:00 +08:00 via Android
冒昧问一下。。lz 是平安银行的吗
guoyuchuan
    15
guoyuchuan  
   2019-07-30 14:19:12 +08:00
HTTP 不行吗
Kontinue
    16
Kontinue  
OP
   2019-07-30 14:28:46 +08:00
@STRRL 不是
roricon
    17
roricon  
   2019-07-30 14:42:04 +08:00   1
最简单的就是学 Storm 的方式,fork 出一个进程,然后用 stdin stdout 交互。
可行,我们生产上跑的模型就是用这种方式……
qq976739120
    18
qq976739120  
   2019-07-30 14:44:20 +08:00
java 调用命令行,然后命令行里跑 python 脚本,这是最方便的
janxin
    19
janxin  
   2019-07-30 14:46:00 +08:00 via iPad
rpc/http ?
flyingghost
    20
flyingghost  
   2019-07-30 15:00:40 +08:00
两个异构子系统没必要直接调来调去啊。强扭的瓜不甜。
作为两个可执行程序,命令行就是个交互接口。
作为两个进程,有进程间通讯机制。
作为两个服务,有 http/rpc 接口或者 mq 做同步 /异步调用。
Raymon111111
    21
Raymon111111  
   2019-07-30 15:16:21 +08:00
http 吧简单

rpc 也可以, grpc 了解一下
wwqgtxx
    22
wwqgtxx  
&nbs;  2019-07-30 16:22:08 +08:00 via iPhone
tcp 或者 unix socket 呗,又简单又可靠
lkan
    23
lkan  
   2019-07-30 16:35:54 +08:00 via iPhone
你们说的 http 是套接字 socket 吗
ffeii
    24
ffeii  
   2019-07-30 17:27:11 +08:00
今天了解到这个: https://www.graalvm.org/
25OHd2qObJmJ6P10
    25
25OHd2qObJmJ6P10  
   2023-03-23 11:34:37 +08:00
@ffeii 不实用啊,实例化一个 Context 就得一秒多,并发下扛不住
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2715 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 26ms UTC 12:03 PVG 20:03 LAX 05:03 JFK 08:03
Do have faith in what you're doing.
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86