juhamwang 2022-04-08 01:27 采纳率: 88.9%
浏览 43
已结题

python 进程间实时传输数据问题

正在折腾用python来写一个跑步计圈系统,遇到一个进程数据传递问题
问题相关代码,请勿粘贴截图
首先说明我是一个业余爱好者,正职是一名体育老师,由于学校场地原因,田径场只有160米一圈,所以人工去记录学生跑圈数是一件比较难的问题,所以想用python 写一个系统来解决这问题,硬件方面我已经购买了rfid超高频读写器和一些电子便签,这足够我在田径场第一二道的读写距离了.这是前提
我用pyqt5写ui界面,里边包括秒表、循环读串口数据、数据库展示、还有一些小控件
遇到的问题是,读取串口数据跟秒表同一进程会出现卡死ui界面的现象,所以我就运用多进程,问题所在就是进程间通信,我把秒表独立一个进程,要是把秒表跟其他小控件一个进程会出现秒表迟缓不准现象,接着就是把此时此刻秒表的秒数实时的传输到读取串口数据的进程中,我用queue来完成这操作,发现传输过来的秒数跟接收到的并加入到此时此刻的串口数据列表当中时秒数也是有点迟缓,同时queue是队列方式,也就是说拿到的秒数是队伍后面的数据,导致迟缓的产生。
我想要达到的结果:能不能是实时秒表的这变量能实时传输到rfid串口数据进程里面去,而不是queue那种队列方式,用一个数据删除一个数据同时也不是最新的数据。。
  • 写回答

1条回答 默认 最新

  • ~白+黑 Python领域新星创作者 2022-04-08 02:12
    关注

    就是每个学生你给贴个标签,然后通过rfid,接收数据,解析出跑步距离和时间?我不知道你得迟缓有多大,但是这种底层的即时通讯python不太适合,不可能太精确,影响因素比较多,rfid也是串口传输数据,queue也有先进先出后进先出,串口传出来的数据迟缓,基本没办法解决,硬件,信号问题都有可能,如果你数据不是跟界面分离的,而是写在gui里面的,gui的反馈刷新也会是性能的瓶颈,另外还要考虑你一次多少个学生一起跑,线程开的太多,切换也是开销,

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    juhamwang 2022-04-08 02:24

    接收到的串口数据迟缓这好像没有,基本上我把标签(大概60个)迅速放到定向天线上就能立刻print出来,就算不能一个print,接着下一个print也能出来,所以这个迟缓是可以接受的(大概差距0.1-0.3s之间),现在问题就是rfid串口这进程print出来的数据要加上秒表进程这数据,这个我感觉python还是能解决的,所以进程传输这是关键,我看到有文章可以共享变量,但我试过好几遍运行就错。。。

    回复
    juhamwang 2022-04-08 02:33

    我主要用来测800-1000米的,0.1-0.3差距还是可以接受的,所以线程是无法胜任,必须多进程并行,让rfid进程读到数据瞬间获取秒表进程实时秒数并加入到此时此刻print出来的列表当中就行,然后再开一个进程来数据处理显示到数据库当中,谢谢你的回答

    回复
    ~白+黑 回复 juhamwang 2022-04-08 05:34

    大概明白了,计时器起跑开始计时,然后到达终点,rfid返回数据,计时器计算时间,然后附加到rfid返回的数据上,存入数据库。由于你的秒表实在gui界面里,你在里面再开循环去不听读取rfid数据势必造成卡死,因为gui界面本身就是一个循环,里面再套一个循环,gui程序就无法运行,进程间交换数据也是很耗时的,当然你也可以通过自环socket,来进行两个进程之间的通讯,与其那样到不然把这两个,过程分开,gui只负责显示结果,另一个进程负责计时,起跑时候rfid获得一个统一的时间戳,显示到gui界面上,结束的时候再获得时间戳,或者采取回调异步的方式,来获取,这样就不用去读计时器的变量,然后gui负责显示数据库里的结果,就好了。

    1
    回复
    展开全部6条评论
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 4月25日
  • 已采纳回答 4月18日
  • 创建了问题 4月8日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部