当前位置: 首页 > news >正文

qt之使用redis与其他程序(python)交互同通信

一、前言

有需求,趁热调试出了嵌入式系统的算法环境安装和桌面,趁热继续调试进阶功能redis通信,redis与sqlite各有千秋,redis可以作为在嵌入式系统下多个程序之间相互通信的中间件,很方便,谁也不用嵌入子程序,大家一起通过redis共享数据,这个感觉在数据通信方向又有个质的提升了

PS:虽然只是会使用,但是能使用起来,说明成长了!

目录

1.为什么不使用UDP或者TCP,而选择redis通信

2.安装redis环境(windows)

3.嵌入式设备中redis适配

下载资源

二、环境

windows10

qt5.7

python3.8

redis5.0.14.1

三、正文

1.为什么不使用UDP或者TCP,而选择redis通信

直接使用 TCP 或 UDP 进行通信

优点

简单直接:实现相对简单,不需要额外安装和配置 Redis 服务。使用标准的网络编程接口,如 Python 的socket库和 Qt 的QTcpSocket、QUdpSocket类,就可以快速搭建起通信机制。

轻量级:没有额外的中间件依赖,减少了系统的复杂度和资源消耗。对于简单的通信需求,TCP 或 UDP 可以提供足够的性能。

灵活性高:可以根据具体需求自定义通信协议,能够更好地适应不同的应用场景。

缺点

缺乏数据共享:TCP 和 UDP 主要用于传输数据,不提供数据共享和存储功能。如果需要在多个程序之间共享数据,需要自己实现数据存储和同步机制。

缺乏消息队列:对于异步消息处理和任务调度,TCP 和 UDP 没有内置的消息队列功能,需要自己实现队列机制。

可靠性和扩展性有限:在处理大量并发连接和高并发请求时,TCP 和 UDP 的可靠性和扩展性可能会受到限制。

使用 Redis 进行通信

优点

数据共享:Redis 是一个内存数据库,支持多种数据结构(如字符串、哈希、列表、集合等),可以方便地在多个程序之间共享数据。例如,Qt 程序和 Python 程序可以同时访问和修改 Redis 中的数据,实现数据的实时同步。

消息队列:Redis 提供了消息队列功能,如LIST数据结构可以用作简单的消息队列。可以使用LPUSH和RPOP等命令实现消息的发布和订阅,方便实现异步消息处理和任务调度。

高并发处理:Redis 是单线程的,通过 I/O 多路复用技术实现高并发处理。它可以处理大量的并发连接和高并发请求,适合用于分布式系统和高并发场景。

持久化:Redis 支持数据持久化,可以将内存中的数据保存到磁盘上,防止数据丢失。在程序重启后,可以从磁盘中恢复数据,保证数据的安全性和可靠性。

分布式锁:Redis 提供了分布式锁功能,可以用于解决多个程序之间的并发访问问题。例如,在多个程序同时访问共享资源时,可以使用 Redis 的分布式锁来保证资源的独占性。

缺点

复杂性增加:需要额外安装和配置 Redis 服务,增加了系统的复杂度和维护成本。

性能开销:由于 Redis 是一个独立的服务,数据的读写需要通过网络进行,会引入一定的性能开销。

总结

如果你的通信需求比较简单,只需要进行简单的数据传输和交互,直接使用 TCP 或 UDP 进行通信是一个不错的选择。如果你的应用场景需要数据共享、消息队列、高并发处理等功能,使用 Redis 进行通信可以带来更多的便利和优势。

2.安装redis环境(windows)

首先确保python环境和QT环境都是可以正常运行的

独立测试启动程序都没有问题

之后安装redis服务软件

Windows电脑环境安装(windows、qt和python都要安装redis环境)

1.Windows安装redis

下载Redis-x64-5.0.14.1.msi文件进行安装。此种方式不仅会将Redis安装目录添加到系统环境变量,还会安装一个Redis系统服务。双击msi安装

参考链接https://blog.csdn.net/collman/article/details/141638356

参考链接Windows下Redis的安装和使用 - 哔哩哔哩

修改redis.windows.conf文件,504行添加requirepass 123456

使用powershell终端,进入redis安装目录, cd D:/LenovoSoftstore/Install/redis

启动服务,网上有的直接发送redis-server,我这需要发送./redis-server

验证成功

执行启动redis

cd D:/LenovoSoftstore/Install/redis

redis-server --service-start

查看redis运行状态

tasklist /FI "IMAGENAME eq redis-server.exe"

测试服务运行状态发送 redis-cli,之后输入set m_int 10返回OK在输入get m_int返回10

获取已经开启的字段列表,命令keys *  查看列表key键值get xxx

详细的redis用法继续上网查吧,分什么订阅和发布,好多模式,这里只是简单测试

2.Qt安装redis

qt调用redis有很多种方式,有的要把redis打包动态库调用,有的要引用一堆文件,资料很少,最终在网上下载找出一种类似调用开源第三方控件的方式,把redis的源码嵌入到程序中,不受编译环境限制,这样qt程序无论时在window下测试还是在虚拟机中交叉编译都可以通过,最终也可以在目标机中运行,程序见test_redis_py_qt.rar重新用AI整合联调python测试

验证,开启redis服务后redis-server --service-start运行qt程序

连接成功

关闭redis服务后redis-server --service-stop运行qt程序

提示错误信息,qt与windows的redis连接交互成功

3.python安装redis

使用命令安装pip install redis

使用pip list查看列表

测试python是否能够调用redis,使用powershell的cd命令进入到测试程序目录

开启redis服务后redis-server --service-start

执行python pytest_enviroment.py(是一个环境测试程序,不是整体的测试程序)

关闭redis服务后redis-server --service-stop

执行python pytest_enviroment.py

报一堆错误信息,反正就是失败

4.整体测试

上面测试都是简单的测试是否能连接,整体测试是将三者结合起来一起测试通信,首先redis服务开启,之后运行qt程序和python程序,qt程序就是可执行文件,双击运行即可,python程序开启5个控制台,都进入到程序目录,执行python xxx.py命令启动程序,之后进行测试

开启服务redis-server --service-start

进入python程序目录cd xxx

启动qt程序

启动python程序

Numpy不能版本太高,要在1.24以下,下面命令降级numpy,否则有俩py程序运行异常

pip install numpy==1.23.5 -i https://mirrors.aliyun.com/pypi/simple/

继续启动程序

python pytest_redis_numpy.py

python pytest_redis_pandas.py

python pytest_redis_tensorflow.py

python pytest_redis_scikitlearn.py

python pytest_redis_matplotlib.py

全部启动成功在终端中循环运行,并打印信息

之后用qt程序依次点击上方的测试按键,会将消息发送给redis,之后python程序监听redis的message消息,处理并返回相应的数据给redis,qt程序订阅redis的消息就会在线程中查询到,之后在textedit显示出来,qt程序订阅了必须用线程处理,否则程序会卡死。

测试成功图,qt程序按下按键py程序收到后有不同的打印信息,最后qt程序窗口显示内容

目前qt程序和python程序在redis服务异常关闭时都会停止运行,这点暂时不处理,先保证环境都是正常启动运行

服务一停,全挂!!!

3.嵌入式设备中redis适配

四、结语

下载资源说明:

资源内部由window下的redis安装包,有qt使用redis的源码包,不使用网上大部分的打包动态库的方式,而是使用调用redis源码文件的形式,好处就是qt内嵌redis的工程可以任意移植到其他平台交叉编译,因为我就是这个需求,在window下只是测试,实际我的需求环境是银河麒麟系统下redis服务,负责多个程序之间的数据通信交互,有qt的程序和python的程序,如果直接用qt调用python程序,缺点很多,很卡,很慢,懂得都懂,要不也不会研究redis了

下载资源点此,有惊吓🤭

http://www.dtcms.com/a/98208.html

相关文章:

  • 基于SpringBoot实现的高校实验室管理平台功能四
  • 多线程 -- Thread类
  • vue学习
  • Linux内核同步机制:解锁并发编程的奥秘
  • 软件的常用设计模式。可参考一个一个学习
  • 用Nginx实现负载均衡与高可用架构(整合Keepalived)
  • [Linux]在vim中批量注释与批量取消注释
  • 进程Kill杀死后GPU显存没有释放仍然被占用,怎么杀死僵尸进程
  • 跟着StatQuest学知识08-RNN与LSTM
  • Claude 在 SVG 绘图创作中的潜力与技巧
  • 【软考-架构】10.1、软件工程概述-CMM-软件过程模型-逆向工程
  • Pycharm (十)字符串扩展:统计小串在大串中出现的次数
  • C++23:现代C++的模块化革命与零成本抽象新高度
  • 笔记:遇见未来——6G协同创新技术研讨会
  • FPGA调试笔记
  • 从代码学习深度学习 - 含并行连结的网络(GoogLeNet)PyTorch版
  • 淘宝双十一大促监控系统开发:实时追踪爆品数据与流量波动
  • 谷粒微服务高级篇学习笔记整理---异步线程池
  • SQL Server数据库引擎服务启动失败:端口冲突
  • 电源系统的热设计与热管理--以反激式充电器为例
  • 1688 店铺清单及全商品数据、关键词检索 API 介绍
  • 【蓝桥杯】每日练习 Day15
  • 【自用记录】本地关联GitHub以及遇到的问题
  • 从代码学习深度学习 - 使用块的网络(VGG)PyTorch版
  • 谈谈你对多态的理解
  • coding ability 展开第七幕(前缀和算法——进阶巩固)超详细!!!!
  • 算法基础——二叉树
  • Java 程序员面试题:从基础到高阶的深度解析
  • Elasticsearch 完全指南
  • 【HarmonyOS 5】初学者如何高效的学习鸿蒙?