Python +pyqt5,如何处理高速采集的数据 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
HITMengbin

Python +pyqt5,如何处理高速采集的数据

  •  
  •   HITMengbin 2021 年 3 月 15 日 2682 次点击
    这是一个创建于 1865 天前的主题,其中的信息可能已经有所发展或是发生改变。
    因为工作需要,使用 pyqt5 设计了一个工具,用于接收设备通过 UDP 发送的数据,数据最快 10us 发送一次,每次一帧 50 个字节,接收到数据后,需要对数据进行保存到 excel 中,并且需要在 pyqt5 编写的界面上实时展示。现在遇到的问题是因为保存到 excel 和显示到界面上,需要花费时间,导致最后数据出现大量丢帧现象。请问大家,针对这种高速数据采集的情况,大概怎么处理呢?
    先存到数据库然后再读出并写入 excel 和显示到界面上的吗?
    18 条回复    2021-03-16 15:12:48 +08:00
    gainsurier
        1
    gainsurier  
       2021 年 3 月 15 日 via iPhone
    python -> c++
    Excel -> 时序库
    HITMengbin
        2
    HITMengbin  
    OP
       2021 年 3 月 15 日
    @gainsurier 暂时换不到 C++l ,现在也在考虑换到数据库来弄了
    rqrq
        3
    rqrq  
       2021 年 3 月 16 日
    必须要实时吗,缓冲两秒行不行
    dayeye2006199
        4
    dayeye2006199  
       2021 年 3 月 16 日   1
    设备和 UI 的通讯之间,可以接一套 kafka 之类的消息队列。设别发送信息到 kafka 上,UI 侧订阅信息,刷新界面;保存到 excel 可以单独起一个进程,订阅同样的 kafka 主题,处理之后写入 excel 。
    supermoonie
        5
    supermoonie  
       2021 年 3 月 16 日
    不用每一次都展示在界面上吧,人的眼睛反应时间好像在 300ms 左右,10us 刷新一次也太快了。。。试试先接收,然后批量展示保存呢
    levelworm
        6
    levelworm  
       2021 年 3 月 16 日   1
    我觉得楼上哥们说的很好,你得先看看真实需求是什么样子。是需要收集所有数据+展示所有数据,还是收集所有数据+展示部分数据,或者是收集部分数据+展现部分数据。
    HITMengbin
        7
    HITMengbin  
    OP
       2021 年 3 月 16 日
    @supermoonie 倒也不用 10us 刷新一次,所以现在的想法是先保存到数据库再刷新,10us 这个速度太快了,显示出来也没必要,人看不出来,主要是看能不能完全保存下来
    HITMengbin
        8
    HITMengbin  
    OP
       2021 年 3 月 16 日
    @levelworm 哥们说的是,在 us 级的速度时,收集全部数据+展示部分数据或者干脆不展示
    supermoonie
        9
    supermoonie  
       2021 年 3 月 16 日 via iPhone
    @HITMengbin 既然展示的时间间隔宽松了,也没必要全都保存,100ms 保存一次或者取单位时间内的均值或者中位数保存应该也可以
    HITMengbin
        10
    HITMengbin  
    OP
       2021 年 3 月 16 日
    @supermoonie 要求 100us 级别的必然全部保存,后续数据分析
    ch2
        11
    ch2  
       2021 年 3 月 16 日   1
    这个问题跟数据库压根没关系,是你的操作得分 batch 来
    UI 方面你只要保证够 60 帧就行了,再高用户是感受不出来的。10us 刷新一次=100000fps,远远高于实际所需。正确的做法是,用限流器的思想,每 10ms 刷新一次,这样你也有 100fps 了
    然后自动保存数据是每隔 10 秒保存到 excel 文件里,如果数据量上百兆的话,磁盘 IO 也会花很久时间的
    你并不需要实时就把数据显示到界面或者保存到文件,攒够一定的 batch_size 再更新一次才对
    no1xsyzy
        12
    no1xsyzy  
       2021 年 3 月 16 日
    吃了问题描述不清的亏

    是你接收不及时被丢弃了吗?
    是否考虑模型视图隔离( MVC 的 M 和 V 隔离啊)
    你如果每到一个包都显示,修改界面花的时间就不止 10us 。
    HITMengbin
        13
    HITMengbin  
    OP
       2021 年 3 月 16 日
    @no1xsyzy 是接收不及时,缓存满了之后后续的就会丢失
    现在就是想直接分开,估计比较麻烦
    u823tg
        14
    u823tg  
       2021 年 3 月 16 日
    看你描述最主要的是 100us 保存一次,显示根本就不用考虑。 那个时间间隔的 ui 刷新是钛合金眼吗。 直接把问题简化成 100us 保存一次。
    HITMengbin
        15
    HITMengbin  
    OP
       2021 年 3 月 16 日
    @ch2 老哥这方法我可以试试看
    HITMengbin
        16
    HITMengbin  
    OP
       2021 年 3 月 16 日
    @u823tg 哈哈哈,是的,超快速度的后期就只考虑保存,不显示了
    u823tg
        17
    u823tg  
       2021 年 3 月 16 日
    @HITMengbin #16 觉得最主要的是不丢数据,开个进程接收数据,然后通过管道扔给另一个进程去处理保存操作去。
    HITMengbin
        18
    HITMengbin  
    OP
       2021 年 3 月 16 日
    @u823tg 是的,超短时间的不丢数据就成了。目前在试的是存入数据库先
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5286 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 49ms UTC 05:50 PVG 13:50 LAX 22:50 JFK 01:50
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86