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…

小工具:批量替换文件夹下所有文件内容中的指定词

问题描述&#xff1a; 数据集中的xml信息所标注的文件后缀写错了&#xff0c;应该为jpg&#xff0c;因此需要将所有xml文件的.png修改为.jpg 解决代码&#xff1a; 函数作用&#xff1a;找出某文件夹下的包含指定关键词文件列表&#xff0c;并将关键字修改为目标字并将新内容…

jvm性能监控工具

jvm可能存在的问题&#xff1a; OutOfMemoryError&#xff1a;内存不足 内存泄露 线程死锁 锁竞争(Lock Contention) Java消耗过多的CPU一、jps(java virtual machine process status tool)监控jvm进程转台信息jps [options] [hostid] -m&#xff1a;输出传入…

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

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

RuntimeError: Integer division of tensors using div or / is no longer supported, and in a future rel

项目场景&#xff1a; 提示&#xff1a;新版python在pytorch中张量与原始数据的除法计算问题。 问题描述 报错 RuntimeError: Integer division of tensors using div or / is no longer supported, and in a future release div will perform true division as in Python 3…

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

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

添加python的系统路径_如何将项目路径添加到系统路径永久地?

我正在使用visualstudio代码构建一个python项目。这是我第一次用编辑器构建一个项目(过去使用Pycharm)。在随着项目越来越大&#xff0c;我想导入一些我在其他目录中编写的类(在同一个项目中)。首先&#xff0c;我在要导入的目录中添加了__init__.py。但是&#xff0c;它没有起…

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

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

Unicode 和 UTF-8 有什么区别?

作者&#xff1a;uuspider 链接&#xff1a;https://www.zhihu.com/question/23374078/answer/65352538 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 举一个例子&#xff1a;Its 知乎日报 你看到的unicode字符集…

Web前端学习笔记:Bootstrap

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

python书写风格_python书写风格

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

shell if else

if ["$IMAGE_FOR_FACTORY_TEST" true];then echo "ro.xl.factoryrebootchecktrue" elseecho "ro.xl.factoryrebootcheckfalse" fi 注意 if 前面有个空格 才到 [

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

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

css 做幻灯片效果

设置一个div 盒子 <div class"ani"></div>设置css 样式 .ani{width:480px;height:320px;margin:50px auto;overflow: hidden;box-shadow: 0 0 5px rgba(0,0,0,1);background-size:cover;background-position: center;-webkit-animation-name:"loops…

报错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…

Android系统init进程启动及init.rc全解析

这是一篇用心写的博客&#xff0c;也希望大家用心看并帮忙找到文章的改进之处&#xff0c;谢谢&#xff1b; 服务启动机制 system/core/init/init.c文件main函数中parse_config_file(init.rc)读取并解析init.rc文件内容。将service信息放置到system/core/init/init_parser.cpp…

python variable_PyTorch中的Variable变量详解

一、了解Variable顾名思义&#xff0c;Variable就是 变量 的意思。实质上也就是可以变化的量&#xff0c;区别于int变量&#xff0c;它是一种可以变化的变量&#xff0c;这正好就符合了反向传播&#xff0c;参数更新的属性。具体来说&#xff0c;在pytorch中的Variable就是一个…

JavaScript高级程序设计---学习笔记(四)

1.全局变量不能通过delete操作符删除&#xff0c;而直接在window对象上定义的属性可以。 var age 29;window.color "red";delete age;//无法删除delete color;//可以删除alert(window.age);//29alert(window.color);//undefined 2.尝试访问未声明的变量会抛出错误&…

git commit查找提交的关键字

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

PyTorch 报错:TypeError: exceptions must derive from BaseException

项目场景&#xff1a; PyTorch 报错&#xff1a;TypeError: exceptions must derive from BaseException 其实是个低级错误&#xff0c;我个人认为是因为没有找到要运行的载体。 问题描述 在 base_options.py 里面设置 --netG 的参数只能在这几个里面选择&#xff1a; self…