python 调用 java 服务

Background

python 以开发快速,灵活多变,兼容性强著称,在一些情况中,python 需要调用其他语言的代码,例如某项服务不提供 python SDK,或者效率上 Cpython 的解析运行效率达不到要求,又或者其他语言或框架在某个领域更加擅长。本文记录了一次 python 调用 java 服务的实战经历,核心原因是阿里云的实时语音转文本接口没有提供 python SDK。

Python Preparation

python 调用 java 常见有 jpype, pyjnius, py4j 等,其中 jpype 和 py4j 有相同的核心开发者,后者的出现是因为开发者认为 jpype 的底层架构不够好,所以本文使用 py4j 作为工具实现。
首先安装 py4j

$ pip install py4j

接着准备 python 关于阿里云实时语音转文本的接口函数

import json
from aliyunsdkcore.client import AcsClient  # 阿里云
from aliyunsdkcore.request import CommonRequest  # 阿里云
from werkzeug.exceptions import BadRequest  # 异常处理
from py4j.java_gateway import JavaGateway  # 从 py4j 引入 java gateway

# 需要设置的全局变量,从阿里云账户获得
APP_KEY = 'xxx'
ACCESS_KEY_SECRET = 'xxx'
ONLINE_DOMAIN = 'xxx'
ONLINE_API = 'xxx'
URI_PATTERN = 'xxx'

def create_token(method):
    """
    创建阿里云连接 token
    """
    # create request
    common_request = CommonRequest(domain=ONLINE_DOMAIN, version=ONLINE_API, uri_pattern=URI_PATTERN)
    common_request.set_method(method)

    # create AcsClient
    my_client = AcsClient(ACCESS_KEY_ID, ACCESS_KEY_SECRET, 'cn-shanghai')

    response = my_client.do_action_with_exception(common_request)

    return response
    
def get_online_transcribe():
    """
    连接 java 服务获得阿里云实时语音转文本的响应
    """
    # create token
    token_response = eval(create_token('POST').decode('utf-8'))
    token = token_response.get('Token', None)
    if not token:
        raise BadRequest('internal error')
    token_id = token.get('Id', None)
    if not token_id:
        raise BadRequest('internal error')

    # create client
    gateway = JavaGateway()
    gateway.entry_point.run(APP_KEY, token_id)  # 和 java 服务配置相关

Java Preparation

首先在 maven 中加入 py4j 的依赖,在根路径 pom.xml 中添加 dependency

<dependencies>
    <dependency>
        <groupId>net.sf.py4j</groupId>
        <artifactId>py4j</artifactId>
        <version>0.10.8</version>
    </dependency>
</dependencies>

接着配置 java 阿里云实时语音转文本主要的功能代码,详见上文所附链接。
再配置 py4j 的接入代码。

package com.alibaba.nls.client.example;

import py4j.GatewayServer;  // 引入 pyfj

import com.alibaba.nls.client.example.SpeechTranscriberWithMicrophoneDemo;

public class SpeechTranscriberWithMicrophoneDemoEntryPoint {
    // 启动函数
    public void run(String appKey, String token) {
        SpeechTranscriberWithMicrophoneDemo demo =
                new SpeechTranscriberWithMicrophoneDemo(appKey, token);
        demo.process();
        demo.shutdown();
    }

    public static void main(String[] args) {

        SpeechTranscriberWithMicrophoneDemoEntryPoint app = new SpeechTranscriberWithMicrophoneDemoEntryPoint();
        // py4j服务
        GatewayServer gatewayServer = new GatewayServer(app);
        gatewayServer.start();
        System.out.println("Gateway Server Started");
    }
}

Conclusion

最后分别启动 java 和 python 相关服务,完成相关功能。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容