Java平台调用Python平台已有算法(附源码及解析)
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<String> httpEntity = new HttpEntity<>(JSONObject.toJSONString(params), headers);
RestTemplate rst = new RestTemplate();
ResponseEntity<String> 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_directory
from k_means import exec
app = 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("/<path:filename>")
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 Flask
app = 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, request
from k_means import exec
app = 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 result
if __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_directory
app = Flask(__name__)
@app.route("/<path:filename>")
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 &
Java平台调用Python平台已有算法(附源码及解析)的更多相关文章
- Python 一键拉取Git分支源码自动解析并执行SQL语句
基于Python实现自动拉取Git分支源码自动解析并执行SQL语句 by:授客 QQ:1033553122 1.代码用途 开发过程中,研发人员会提交SQL更新脚本到Git源码库,然后测试负责去拉取这些 ...
- Java爬取同花顺股票数据(附源码)
最近有小伙伴问我能不能抓取同花顺的数据,最近股票行情还不错,想把数据抓下来自己分析分析.我大A股,大家都知道的,一个概念火了,相应的股票就都大涨. 如果能及时获取股票涨跌信息,那就能在刚开始火起来的时 ...
- 用Python生成组织机构代码,附源码
#!/usr/bin/python import random def haoma(): ww = [3,7,9,10,5,8,4,2]#suan fa yin zi cc = [] dd=0 for ...
- java抓取东方财富股票数据(附源码)
背景 前段时间给朋友写了一个自动抓取同花顺股票数据的程序,不少人觉得不错. 这几天后台有粉丝给我留言让我也抓一下东方财富的数据,说东方财富的数据特别难抓,我还真不一定能搞得定. 本来我是一个德艺双磬且 ...
- PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二手急速响应捡垃圾平台_3(附源码持续更新)
说明 文章首发于HURUWO的博客小站,本平台做同步备份发布. 如有浏览或访问异常图片加载失败或者相关疑问可前往原博客下评论浏览. 原文链接 PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二 ...
- Python的开源人脸识别库:离线识别率高达99.38%(附源码)
Python的开源人脸识别库:离线识别率高达99.38%(附源码) 转https://cloud.tencent.com/developer/article/1359073 11.11 智慧上云 ...
- 13行代码实现:Python实时视频采集(附源码)
一.前言 本文是<人脸识别完整项目实战>系列博文第3部分:程序设计篇(Python版),第1节<Python实时视频采集程序设计>,本章内容系统介绍:基于Python+open ...
- Java开源生鲜电商平台-盈利模式详解(源码可下载)
Java开源生鲜电商平台-盈利模式详解(源码可下载) 该平台提供一个联合买家与卖家的一个平台.(类似淘宝购物,这里指的是食材的购买.) 平台有以下的盈利模式:(类似的平台有美菜网,食材网等) 1. 订 ...
- Java开源生鲜电商平台-用户表的设计(源码可下载)
Java开源生鲜电商平台-用户表的设计(源码可下载) 说明:由于该系统属于B2B平台,不设计到B2C的架构. 角色分析:买家与卖家. 由于买家与卖家所填写的资料都不一样,需要建立两站表进行维护,比如: ...
随机推荐
- 【Git】原Git库拆分子目录作为新仓库,并保留log记录
一.需求描述: 现有一个git仓库,Team A和Team B的人操作同一仓库的不同目录,Team A的dev希望Team B的dev没有权限review属于Team A的代码目录,故现需要先将这个g ...
- Windows 10开发基础——指针事件和操作事件(一)
主要内容: 1.指针事件 2.操作事件 1.指针事件 指针事件由各种活动输入源引发,包括触摸.触摸板.笔和鼠标(它们替代传统的鼠标事件).指针事件基于单一输入点(手指.笔尖.鼠标光标),但不支持基于速 ...
- C#应用配置信息保存和读取
//保存信息 SystemConfig.WriteConfigData(“字段名称”, “这里是需要保存的内容”); //读取信息 SystemConfig.GetConfigData(“字段名称”, ...
- 网站运行编译器错误CS1617: 选项“6”对 /langversion 无效;必须是 ISO-1、ISO-2、3、4、5 或 Default
运行winform程序时提示, CS1617: 选项“6”对 /langversion 无效:必须是 ISO-1.ISO-2.3.4.5 或 Default 找到网站的web.config配置文件,找 ...
- Windows开机自启动位置
HKCU refers to HKEY_CURRENT_USERHKLM refers to HKEY_LOCAL_MACHINE HKCU\Software\Microsoft\Windows\Cu ...
- JavaWeb实现上传文件
需要 commons-io与commons-fileupload 首先在jsp中创建一下布局 <%@ page contentType="text/html;charset=UTF-8 ...
- nginx搭建静态网站
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务,常用于负载均衡构架,以提高网站的并发量,概念不过多介绍,更多细节请自行百度, 本文是纯操作案例,假设你已经知道什么是ngi ...
- JavaScript 一元正号运算符
本文适合JavaScript初学者. 一元正号介绍 一元正号运算符(+)位于其操作数前面,计算其操作数的数值,如果操作数不是一个数值,会尝试将其转换成一个数值. 尽管一元负号也能转换非数值类型,但是一 ...
- 使用burpsuite进行重放攻击
原创博客,转载请注出处! 我的公众号,正在建设中,欢迎关注: 1.安装好burpsuite后打开程序,切换至proxy->intercipt,因为是重放攻击不用拦截数据包所以关闭intercep ...
- java小数保留位数四舍五入
方法一:四舍五入 double f = 111231.5585; BigDecimal b = new BigDecimal(f); double f1 = b.setScale(2, Roundin ...