热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java远程调用python_用Java调用Python?

嘿,我以为即使迟到,我也会输入我的答案。我认为首先要考虑一些重要的事情,你希望有多强大的java和python之间的链接。首先࿰

嘿,我以为即使迟到,我也会输入我的答案。 我认为首先要考虑一些重要的事情,你希望有多强大的java和python之间的链接。

首先,您是否只想调用函数或者您是否真的想要python代码来更改java对象中的数据? 这是非常重要的。 如果您只想调用带或不带参数的python代码,那么这并不是很困难。 如果你的参数是原始的,那就更容易了。 但是如果你想在python中有java类实现成员函数,这会改变java对象的数据,那么这不是那么容易或直截了当。

其次我们是在谈论cpython还是会jython呢? 我会说cpython就是它的所在! 我主张这就是为什么python如此酷! 有这么高的抽象但是在需要时可以访问c,c ++。 想象一下,如果你能在java中拥有它。 这个问题甚至不值得问,如果jython是好的,因为无论如何它很容易。

所以我使用了以下方法,并将它们从易到难的列出:

Java到Jython

优点:轻松简单。 有对java对象的实际引用

缺点:没有CPython,非常慢!

来自java的Jython非常简单,如果这真的足够那么好。 然而它非常慢,没有cpython! 如果没有cpython,生活是否值得生活我不这么认为! 您可以轻松地使用python代码为您的java对象实现您的成员函数。

通过Pyro从Jython到CPython的Java

Pyro是python的远程对象模块。 你在cpython解释器上有一些对象,你可以发送它通过序列化传输的对象,它也可以通过这种方法返回对象。 请注意,如果从jython发送序列化的python对象,然后调用一些更改其成员中的数据的函数,那么您将不会在java中看到这些更改。 您只需要记住从pyro发回您想要的数据。 我相信这是进入cpython的最简单方法! 你不需要任何jni或jna或swig或....你不需要知道任何c或c ++。 嗯嗯?

优点:访问cpython,不像以下方法那么困难

缺点:无法直接从python更改java对象的成员数据。 有点间接,(jython是中间人)。

Java到C / C ++通过嵌入式解释器通过JNI / JNA / SWIG到Python(也许使用BOOST库?)

OMG这种方法不适合胆小的人。而且我可以告诉你,用一种不错的方法实现这一目标需要很长时间。你想要这样做的主要原因是你可以运行cpython代码,它完全控制你的java对象。在决定尝试使用python(就像一匹马)来尝试和java(就像一只黑猩猩)一样,需要考虑一些重要的事情。首先,如果你让翻译失败,你的节目就会熄灯!并没有让我开始处理并发问题!此外,还有分配锅炉,我相信我找到了最好的配置,以尽量减少这个锅炉,但它仍然是分配!那么如何解决这个问题:考虑到C ++是你的中间人,你的对象实际上是c ++对象!好,你现在知道了。只需将您的对象编写为cpp中的程序,而不是使用您希望从两个世界访问的数据。然后你可以使用名为swig的包装器生成器([http://www.swig.org/Doc1.3/Java.html)]使java可以访问它并编译一个你称之为System.load的dll(这里的dll名称) )在java中。首先让这个工作,然后继续努力!要进入python,您需要嵌入一个解释器。首先,我建议做一些hello解释程序或本教程在C / C中嵌入python。一旦你有了工作,就有时间让马和猴子跳舞!您可以通过[boost] [3]将c ++对象发送给python。我知道我没有给你鱼,只是告诉你在哪里找到鱼。编译时需要注意的一些指示。

编译boost时,需要编译共享库。 你需要在jdk中包含和链接你需要的东西,即jawt.lib,jvm.lib,(启动应用程序时你的路径中还需要客户端jvm.dll)以及python27.lib或者 无论如何以及boost_python-vc100-mt-1_55.lib。然后包括Python / include,jdk / include,boost和仅使用共享库(dll),否则boost有一个teary。 我知道,是的。 有很多方法可以解决这个问题。 因此,请确保逐块完成每件事。 然后把它们放在一起。



推荐阅读
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • C#实现文件的压缩与解压
    2019独角兽企业重金招聘Python工程师标准一、准备工作1、下载ICSharpCode.SharpZipLib.dll文件2、项目中引用这个dll二、文件压缩与解压共用类 ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • 本文总结了Java初学者需要掌握的六大核心知识点,帮助你更好地理解和应用Java编程。无论你是刚刚入门还是希望巩固基础,这些知识点都是必不可少的。 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • 本文深入解析了Django框架中的MVT(Model-View-Template)设计模式,详细阐述了其工作原理和应用流程。通过分析URL模式、视图、模型和模板等关键组件,读者将全面理解Django应用程序的架构体系,掌握如何高效地构建和管理Web应用。 ... [详细]
  • 在VS2013中编译FFMPEG时遇到的问题及解决方案
    在使用VS2013编译旧版本FFMPEG库时遇到了一些问题,因为官方并未提供预编译的LIB和DLL文件。由于对Linux环境不熟悉,只能在Windows环境下进行配置和编译。具体步骤如下:首先,下载FFMPEG的源代码;然后,安装必要的编译工具和依赖项;接着,配置Visual Studio 2013的项目设置;最后,解决编译过程中出现的各种错误和警告。通过这些步骤,最终成功编译出所需的FFMPEG库文件。 ... [详细]
  • 机器学习算法:SVM(支持向量机)
    SVM算法(SupportVectorMachine,支持向量机)的核心思想有2点:1、如果数据线性可分,那么基于最大间隔的方式来确定超平面,以确保全局最优, ... [详细]
  • 安装 IIS 5.1 并注册 .NET 2.0 后,访问页面时出现 500 错误。本文提供详细的步骤和解决方案,帮助您解决该问题。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
author-avatar
没人欣赏2602896483
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有