请教一个Python并行调用Java的问题

kevinzou123 2023-05-06 18:16:31

非计算机专业,手里有一个一直维护的Java计算库,能够完成业务计算。由于Python的生态圈强大,目前主要的数据分析和可视化代码是在Python中完成的,业务计算环节一直使用Python调用Java完成。Python调用Java的Jar库,必须通过Jpype或者JCC的形式调用,这两个都必须在使用前启动java虚拟机,然后java函数在这个虚拟机上执行。

现在的问题是,随着计算场景的复杂程度提高,Python调用Jar计算的速度已经远远够不上需求,算2个小时的场景数据需要一天的时间。现在想改进这一套计算程序,一种方式是在Java中重新修改计算函数,做成多线程形式;一种是能够找一种在Python中实现并行调用Java的方法。第一种方法比较复杂,而且我也没有找到一种好的存储大量数据的方法,第二种方法没有找到实现思路。

请问各位有没有解决的方法?

 

...全文
238 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
haokuna1 2023-06-21
  • 打赏
  • 举报
回复

使用分布式计算框架来改进计算速度和实现并行调用Java时

from pyspark.sql import SparkSession

# 创建SparkSession
spark = SparkSession.builder \
    .appName("Java Calculation") \
    .master("local[*]") \
    .getOrCreate()

# 创建一个并行化的数据集
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
rdd = spark.sparkContext.parallelize(data)

# 并行调用Java计算库
def call_java_function(value):
    # 在这里调用Java计算库的函数,例如:
    # result = java_library.compute(value)
    result = value * 2  # 这里只是举例,实际应该调用Java函数
    return result

# 使用map函数并行调用Java计算库
results = rdd.map(call_java_function).collect()

# 打印结果
for result in results:
    print(result)

# 关闭SparkSession
spark.stop()


风伴流云 2023-05-09
  • 打赏
  • 举报
回复 1

python如果以高并发的方式调用java程序,linux系统建议使用多进程并发,win系统多线程和多进程都可以。至于数据存储方面,数据库和文件方式存储也是手段。

kevinzou123 2023-05-17
  • 举报
回复
@风伴流云 感谢回复,请问Python多进程的话,每一个进程中都可以启动一个Java虚拟机,然后调用执行Java函数吗?数据存储的话目前用的HDF5文件,单次仿真数据是100GB以内,暂时能够满足需求,不知道数据库是否能提高性能。

11,000

社区成员

发帖
与我相关
我的任务
社区描述
创建由Python学习者和社区专家组成的国内最大的第三方Python中文社区,帮助社区成员更好地入门学习、职业成长和应用实践
python学习 企业社区
社区管理员
  • Python全栈技术社区
  • Lumos_zbj
  • 北侠大卫
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

创建由Python学习者和社区专家组成的国内最大的第三方Python中文社区,帮助社区成员更好地入门学习、职业成长和应用实践

  • 这里有最新最全的 Python 学习内容及资源,每月多达4次技术公开课
  • 这里有众多 Python 学习者,陪伴你一起交流成长
  • 这里有专业 Python 社区专家、讲师,帮助你跨越学习瓶颈,解决实操难题
  • 这里有丰富的社区活动,可以开阔眼界,结识更多同伴

【最新活动】:

  1. 周四技术公开课讲师招募中,点击查看详情
  2. “Python 社区专家团” 招募中,点击查看详情

 

试试用AI创作助手写篇文章吧