异构模块之间如何数据传输?举例java和python两种不同语言编写的模块之间数据交互的几种方式(入门消息队列RabbitMQ)

本文介绍了在Java和Python不同语言模块间进行数据传输的三种方法,包括直接执行脚本、通过第三方文件以及使用消息队列RabbitMQ。重点讲述了RabbitMQ的工作原理及其实现代码,展示了在大量数据传输时,RabbitMQ在效率和稳定性上的优势。
摘要由CSDN通过智能技术生成

异构模块之间如何数据传输?举例java和python两种不同语言编写的模块之间数据交互的几种方式(入门消息队列RabbitMQ)

问题描述

项目过程中可能会遇到,java从数据库取了很多数据,但java本身不方便处理,所以传递给python去处理,如何传?这里我结合很多已存在的方法,然后再谈谈怎么用rabbitmq来操作。
这里会举简单的例子示范,当然前提你需要了解基本的java,python代码编写,大致了解下队列、rabbitmq是啥,还有相关的文件操作、json等等。

方法

方法一:java直接执行python脚本.py文件,把数据放到参数里传递

举例说明:
java代码,

    @Test
	public void test()  {
   
        String pythonPath="/Library/Frameworks/Python.framework/Versions/3.6/bin/python3 ";
        String filePath="/Users/guang/Documents/Python_Project/Test/test/receiver.py ";

        //首先定义个list,赋值。
        List<Integer> list1 = new ArrayList<Integer>();
        int i = 1;
        while(i<=10000) {
   
        	list1.add(i);
        	i++;
        }
        
        //调用python脚本并传递list
        try {
   
            Process process = Runtime.getRuntime().exec(
                    pythonPath + filePath + list1);
            BufferedReader in=new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line=in.readLine())!=null){
   
                System.out.println(line);
            }
            in.close();
            int re=process.waitFor();
            System.out.println(re==1?"----状态码1----运行失败":"----状态码0----运行成功");
        } catch (IOException e) {
   
            e.printStackTrace();
        } catch (InterruptedException e) {
   
            e.printStackTrace();
        }
      
	}

python代码,

if __name__ == '__main__':
    print("------------- start -------------")
    # print("len(sys.argv[1:])==", len(sys.argv[1:]))
    print("sys.argv[1:]==", sys.argv[1:])

运行结果:

在这里插入图片描述
这样的方式有两个问题:
1、参数传输过程中形式会发生变化,比如上面我实际想传一个list过去,但通过sys.argv[1:]可以看到,拿到的数据是一个被加工过的字符串形式,这样你又要花费大量精力去切割或者其他操作来把它在python中变成一个列表;
2、你不妨试着把数据量调大10倍,从10000 -> 100000,发现会报下面的错误,因为传不了那么大的。
在这里插入图片描述

方法二:通过第三方文件作为中间站

(因为遇到项目的特殊性,这里举的例子是把大量数据存储到了excel中),即增加了写入和读取的过程。

数据准备:
为了方便测试,这里模拟java从数据库取出的每条数据是这么个简单的形式:
某地区|某年指标1|某年指标2|某年指标3| …
在这里插入图片描述模拟生成数据代码:

public class testObj {
   
	
	private String place;
	private List<Integer> datalist;
	
	public S
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

认真敲代码的C罗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值