java 调用python_Java平台如何调用Python平台?

37584197dbe59b91bec6987ad9150418.png

1. 问题描述

Java平台要调用Pyhon平台已有的算法,为了减少耦合度,采用Pyhon平台提供Restful 接口,Java平台负责来调用,采用Http+Json格式交互。

2. 解决方案

2.1 JAVA平台侧

2.1.1 项目代码

  public static String invokeAlgorithm(String url, HashMap params) throws Exception {        HttpHeaders headers = new HttpHeaders();        headers.setContentType(MediaType.parseMediaType("application/json; charset=UTF-8"));        headers.add("Accept", MediaType.APPLICATION_JSON.toString());        HttpEntity httpEntity = new HttpEntity<>(JSONObject.toJSONString(params), headers);        RestTemplate rst = new RestTemplate();        ResponseEntity stringResponseEntity = rst.postForEntity(url, httpEntity, String.class);        return stringResponseEntity.getBody();    }

2.1.2 代码解析

两个入参:url为Python提供restful调用方法;params参数,项目中参数使用了map,然后将map转成了Json,与Python服务器约定Json格式传输。

2.2 python平台侧

经过反复调研与深思熟虑的考虑后,决定采用flask提供Rest接口, flask 是一款非常流行的python web框架,微框架、简洁,社区活跃等。(其实是因为安装的Anaconda自带了flask,一配置一启动好了,就是这么巧)

2.2.1 项目代码

# -*- coding: utf-8 -*-from flask import Flask, request, send_from_directoryfrom k_means import execapp = Flask(__name__)import logging@app.route('/')def index():    return "Hello, World!"# k-means算法@app.route('/getKmeansInfoByPost', methods=['POST'])def getKmeansInfoByPost():    try:         result = exec(request.get_json())    except IndexError as e:        logging.error(str(e))        return 'exception:' + str(e)    except KeyError as e:        logging.error(str(e))        return 'exception:' + str(e)    except ValueError as e:        logging.error(str(e))        return 'exception:' + str(e)    except Exception as e:        logging.error(str(e))        return 'exception:' + str(e)    else:        return result@app.route("/")def getImages(filename):    return send_from_directory(dirpath, filename, as_attachment=True)if __name__ == '__main__':    app.run(host="0.0.0.0", port=5000, debug=True)

2.2.2 代码解析

代码为真实项目示例,去掉了一些配置而已,示例中包含三个方法,分别说一下

(1)最基本Rest接口:helloword

# -*- coding: utf-8 -*-from flask import Flaskapp = Flask(__name__)@app.route('/')def index():    return "Hello, World!"if __name__ == '__main__':    app.run(host="0.0.0.0", port=5000, debug=True)

(2)调用其他python文件的Rest接口

# -*- coding: utf-8 -*-from flask import Flask, requestfrom k_means import execapp = Flask(__name__)import logging# k-means算法@app.route('/getKmeansInfoByPost', methods=['POST'])def getKmeansInfoByPost():    try:         result = exec(request.get_json())    except IndexError as e:        logging.error(str(e))        return 'exception:' + str(e)    except KeyError as e:        logging.error(str(e))        return 'exception:' + str(e)    except ValueError as e:        logging.error(str(e))        return 'exception:' + str(e)    except Exception as e:        logging.error(str(e))        return 'exception:' + str(e)    else:        return resultif __name__ == '__main__':    app.run(host="0.0.0.0", port=5000, debug=True)

说明:1.接收POST方法;2. 从request获取java传过来的参数,对应上面的java调用代码

(3) 文件下载Rest接口

# -*- coding: utf-8 -*-from flask import Flask, send_from_directoryapp = Flask(__name__)@app.route("/")def getImages(filename):    return send_from_directory(dirpath, filename, as_attachment=True)if __name__ == '__main__':    app.run(host="0.0.0.0", port=5000, debug=True)

说明:1.还是flask框架提供的:send_from_directory

2.dirpath目录,一般可以给个固定存放目录,调用的时候只用给文件名称就可以直接下载对应文件。

2.3 Linux服务器启动python服务

      nohup python restapi.py &

更多信息请关注:@软件老王,关注不迷路,软件老王和他的IT朋友们,分享一些他们的技术见解和生活故事。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468915.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C 实现 删除字符串空白符的函数 strtrim

说在前面的话 字符串操作在很多C语言比赛里面都有涉及&#xff0c;最近公众号里面的C语言比赛&#xff0c;都是两个关于字符串操作的题目&#xff0c;希望大家认真看题目。 直接上代码 /*************************************************************************> Fil…

javascript犀牛书_犀牛书作者:最该忘记的JavaScript特性

作者&#xff1a; 李松峰转发链接&#xff1a;https://mp.weixin.qq.com/s/guAN1Cz2gYfKdBhmUpLyVA前言JavaScript这门语言的第一个演示版差不多就在25年前诞生。没记错的话&#xff0c;25年前的今天&#xff0c;1995年5月10日&#xff0c;星期三&#xff0c;我刚刚过了创造Jav…

Weblogic(4)—— Linux环境Weblogic12c配置节点管理(nodemanage.properties)来开启应用服务器(server)及线程池配置...

Linux环境搭建weblogic12c服务器&#xff0c;用来进行weblogic服务器项目部署&#xff0c;刚创建weblogic服务器会默认存在AdminServer管理服务器。但是项目应用一般是不能挂在这个服务器上的&#xff0c;需要自己单独创建应用服务器。 使用root权限登录 服务器&#xff1a; 输…

IDEA与Maven安装+IDEA中利用maven自动下载第三方Jar包

Maven详细安装教程_慕之寒的博客-CSDN博客_maven安装一、安装apache官网下载需要的版本&#xff0c;然后解压缩&#xff0c;解压路径尽量不要有空格和中文Maven – Download Apache Mavenhttps://maven.apache.org/download.cgi二、配置环境变量新建 系统变量变量名&#xff1a…

Web前端学习笔记:Bootstrap

转载于:https://www.cnblogs.com/mmgds/p/6681817.html

计算机软件需求规格说明规范_太阳能(光伏)组件安全规范测试简介_丙观科技

太阳能组件的安全规范测试包含• 接地连续性测试(也称为接地电阻测试)• 绝缘测试 (也称为湿漏电流测试&#xff0c;湿绝缘电阻测试)• 耐压测试 (也称为介质耐压试验)测试设备必须满足下列标准中规定的相关测试要求• IEC 61215 地面用晶体硅光伏组件-设计鉴定和定型• IEC 61…

报错FloatingPointError: Loss became infinite or NaN at iteration=88!

项目场景&#xff1a; Traceback (most recent call last): File "/home/yuan/桌面/shenchunhua/CondInst-master/train_net.py", line 255, in <module> args(args,), File "/home/yuan/anaconda3/envs/AdelaiNet/lib/python3.7/site-packages/d…

git commit查找提交的关键字

使用命令 git log --grepaplog 参考&#xff1a; https://stackoverflow.com/questions/1337320/how-to-grep-git-commit-diffs-or-contents-for-a-certain-word

C语言测试n的阶乘和x的n次方

题目描述 输入一个正数x和一个正整数n&#xff0c;求下列算式的值。要求定义两个调用函数&#xff1a;fact(n)计算n的阶乘&#xff1b;mypow(x,n)计算x的n次幂&#xff08;即xn&#xff09;&#xff0c;两个函数的返回值类型是double。 输出保留4位小数。 输入 x n 输出 数列…

自己动手写java虚拟机_自己动手写操作系统(要了解的知识点)

自己动手写操作系统(开篇)自己动手写操作系统(字符显示)说明&#xff1a;Intel 8086 或者不同的处理器&#xff0c;开机寄存器数据可能不一样&#xff0c;但是大致原理差不多了解过计算机启动的同学肯定知道&#xff0c;当计算机启动的时候 BIOS 会加载 MBR 数据 512 字节到 0x…

git入门基础

git基础 参考&#xff1a;官网git基础 git 文件的生命周期 文件的生命周期图&#xff1a; git中的文件可以分为4个阶段. Untracked &#xff1a; 这是目录中没有被跟踪的文件&#xff0c;即不在git项目中&#xff0c;使用 git commit 等命令对文件进行提交时不会提交这样的文件…

Android 充电LED控制

1、前言 充电LED灯控制是Android设备的基本功能&#xff0c;主要用于提示设备的电池状态&#xff0c;充电状态&#xff0c;满电状态&#xff0c;低电状态&#xff0c;很多手机厂商还使用呼吸效果来显示&#xff0c;普通的低端设备会使用两个LED灯表示&#xff0c;红灯表示充电…

【PyAutoGUI操作指南】04 消息框功能+Question+Waring+Critical+自定义消息框

PyAutoGUI利用PyMsgBox中的消息框函数提供跨平台的纯Python方式来显示JavaScript样式的消息框。 5.1 alert&#xff08;&#xff09; import pyautoguipyautogui.alert(text这里写内容, title通知框标题位置, buttonOK)5.2 confirm() import pyautoguipyautogui.alert(text这…

js 弹出层的点击事件影响到底层的点击事件_聊一聊 Node.js 错误处理

个人博客&#xff1a;https://blog.skrskrskrskr.com错误分类软件程序中&#xff0c;我们可以将错误大致分为外部错误和内部错误两大类。外部错误是正确编写的程序在运行时产生的错误。它并不是程序本身的 bug&#xff0c;更多是一些外部原因导致的问题&#xff0c;比如请求超时…

老王带你理解算法复杂度O(1),O(N),O(N^2)

上图对应的是算法复杂度的图片&#xff0c;X轴对应的是n(问题规模)&#xff0c;Y轴对应的是执行的运行时间。 我们先从简单的复杂度解读O(1) 从上面的图片我们可以看到O(1)的复杂度是恒定的&#xff0c;一点波澜都没有&#xff0c;什么是O(1)呢&#xff0c;就比如你是一个酒店…

【PyAutoGUI操作指南】05 屏幕截图与图像定位:截图+定位单个目标+定位全部目标+灰度匹配+像素匹配+获取屏幕截图中像素的RGB颜色

6 屏幕截图与图像定位 PyAutoGUI可以拍摄屏幕截图&#xff0c;将其保存到文件中&#xff0c;并在屏幕中定位图像。OSX使用操作系统附带的screencapture命令。Linux使用scrot命令&#xff0c;可以通过运行sudo-apt-get-install-scrot来安装该命令。 功能介绍&#xff1a;一个需…

C语言-数组a 和a 的区别

面试经典题目 #include "stdio.h"int main() {int a[5] { 1,2,3,4,5 };int *ptr (int *)(&a 1);printf("%d,%d", *(a 1), *(ptr - 1));/*getchar是用VS编写方便查看输出*/getchar();return 0; }请思考一下上面的输出结果&#xff0c;如果你非常自…

前端为什么有的接口明明是成功回调却执行了.catch失败回调_前端进阶高薪必看-手写源码篇(高频技术点)...

前言此系列作为笔者之前发过的前端高频面试整理的补充 会比较偏向中高前端面试问题 当然大家都是从新手一路走过来的 感兴趣的朋友们都可以看哈初衷我相信不少同学面试的时候最怕的一个环节就是手写代码 大家一定听过这句话talk is cheap, show me the code 没事 此文章不仅包含…

C/C++函数指针与指针函数

前面说的话 面试的时候&#xff0c;经常有面试官问这个问题&#xff0c;在Linux内核里面也是经常被使用的&#xff0c;在看很多大神的代码里面&#xff0c;我们也经常遇到函数指针与指针函数&#xff0c;一样&#xff0c;如果你自己没问题了&#xff0c;就不用往下看了。 定义…

jsp人事管理系统_Jsp+Ssm+Mysql实现的医院人事管理系统源码附带视频运行教程

项目地址&#xff1a;jspssmmysql实现的医院人事管理系统源码附带视频运行教程|猿来入此【beta】多用户版IT项目教程源码分享网站​www.yuanlrc.com今天给大家演示的是一款由jspssm&#xff08;springspringMVCmybatis&#xff09;实现的医院人事管理系统&#xff0c;系统比较简…