目前有个 Python 的脚本是需要死循环不停的获取数据处理完成后再展示出来,用 PyQT 的话需要需要登陆远程桌面才能看数据
用了 streamlit ,发现必须一直打开浏览器才能执行脚本,关闭浏览器就不执行了
用通知的方法消息几秒一条太频繁了
要是直接死循环里修改 HTML 倒是可以,但是要不停的让浏览器自动刷新或者手动刷新浏览器
请问 V2 的各位大神,还有别的方便一点的方法嘛
1
Goooooos 215 天前
websocket
|
3
NoOneNoBody 215 天前
pyqt 为何要远程登录?脚本不在同一机器运行?
感觉重点在消息筛选,而不是显示,你这里写已经有多种方法显示了,显然如何显示不是问题 |
4
NoOneNoBody 215 天前 1
另外吐槽一下,不要用“死循环”这样的词,感觉像是循环会造成问题,应该用“无限循环”这样感觉好些
|
5
B4a1n OP @NoOneNoBody 老哥说的有理
|
6
itskingname 215 天前
streamlit + 多线程可以解决。启动程序以后,创建一个子线程来无限循环。结果写入到一个变量里面。
streamlit 访问以后,直接读取这个变量并显示在网页上。 |
7
B4a1n OP @NoOneNoBody 因为想丢到服务器上去跑,自己又想实时看执行的结果,所以想用 web 的形式来展示数据
|
8
B4a1n OP @itskingname 好像关闭掉网页后 streamlit 对应的任务就停止执行了呀
|
9
NoOneNoBody 215 天前
本地的话,pyqt 起一个 qthread 执行循环,在循环内 emit 消息,主线程接受处理并显示
异地的话,要保持一个长连接通讯,然后就可以处理消息了,又或者文件方式发送/接受 如果消息是简单的 html ,textedit 支持 html4 ,可以直接显示,如果复杂一些也可以用个 webengine/webview 如果不是 html ,自己写个 parser 所以重点还是消息过滤,次/几秒,频率太高的话,记入 log 或者其他,筛选显示级别,如果不重要不需记录,可以建个内存 io ,stringio 或者 ram sqlite ,必要时记录,不必要的话定时清空 看上面说的,消息基本都能传到且完整,所以怎么分、切割再合并显示都是小问题,可能美观和格式调整更耗时呢 |
10
ipwx 215 天前
如果你只会用 streamlit 那估计比较麻烦。
否则不如上 Flask |
11
paopjian 215 天前
没看懂呢,Python 起一个多线程不好了?懒得通信就共用一个文件什么的互相读
我写的启动 uvicorn 同时启动 http.server 下载文件测试: <script src="https://gist.github.com/paopjian/bb836fad7806857cbc7b71e7d8e14a35.js"></script> |
12
paopjian 215 天前
|
13
knva 215 天前
异步通信?
|
15
B4a1n OP @NoOneNoBody 有道理 我觉得直接写读写 HTML 算逑
|
19
itskingname 215 天前
@B4a1n #8 就不该用 streamlit 。换成 fastapi 吧。
|
20
Leon6868 215 天前
可以了解一下 flask sse ,主线程通过 yield 或消息队列传递数据给 web 线程,然后通过 sse 输出。使用消息队列的话,对原本的代码应该侵入性极小
|
22
Opportunity 215 天前
浏览器自动刷新也没啥问题吧,虽然办法有点古老,但是也很有效啊,https://www.ssllabs.com/ssltest/analyze.html 不就是这个策略
|
23
B4a1n OP @Opportunity 谢谢老哥 我学习一下
|
24
iOCZS 214 天前
Eventsource
|
25
CnpPt 214 天前
这个工具应该能解决楼主的需求
https://github.com/joewalnes/websocketd |
26
treblex 213 天前
|
27
Latin 212 天前
SSE
|