@
CEBBCAT 抱歉,背景可能没有交代清楚
> 1. requests 请求数据为什么会有阻塞?调物联网服务器接口不是调个 API 吗?几百 ms 吧?
这只是个 Demo,我的 Flask 网站调用物联网服务器接口,物联网服务器向 IOT 设备请求数据,IOT 设备返回给物联网服务器,物联网服务器再返回我的 Flask 网站,中间可能耗时 3、4 秒。简单来说姑且认为是一个 Requests 请求会耗时 3、4 秒。实际上即便几百 ms 也是不可接受的,requests 是阻塞请求,在此期间用户向我的网站请求网页无法得到及时响应。
> 2. 网站为什么有卡顿?用户每次看网页都要从物联网服务器取数据呀?为什么不把数据准备好呢?
可以准备好,例如在最新数据更新前先返回历史数据。但总会遇到 Requests 阻塞场景,想知道大家怎么解决。
> 3. 架构不明,不知道为什么使用多线程
简单来说,就做两件事情,
1. 运行 Flask,响应网页请求
2. 间隔 10 秒像第三方物联网服务器发起 Requests 请求
矛盾冲突:
由于 Requests 请求耗时较长,导致 Flask 程序无法及时响应网页请求。
> 为什么使用多线程?
可能用了错误的思维去解决这个问题,因为在嵌入式中,同优先级两个任务会共享 CPU 时间,时间片轮转,这样就能并行处理上述的两件事情。