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

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

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

    目前,深度学习都是用 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  
       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   ·   实用小工具   ·   2724 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 05:53 · PVG 13:53 · LAX 21:53 · JFK 00:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.