Re: [问题] py程式之间的值如何传递

楼主: HuangJC (吹笛牧童)   2023-01-26 10:51:09
谢谢你的讨论,我好像看到适合我的东西 XD
我的例子是我要写出 sensor(比如读取温度计)
还有另外写出使用 sensor 值运作的程式
socket 我会写,但处理断线,timeout 的逻辑累死我了
后来我用 mqtt
除掉处理断线,timeout 等等问题
这种类似 call back 的逻辑给我另一种困扰, 比如
sensor.py 送出温度计值
然后 relay.py 就必需接收到这个值处理起来
但其实我不在乎温度计何时传值给我
我在乎的是最后一个值是什么
比如五秒有五次更新值,反正我在第五秒才想处理
那前四次的值其实我不在乎,就让它消失吧..
用 mqtt 其实我就是在收到讯息时,on_message 自己维护一块内存先塞进去
何时要用此值,才去问那块内存
档案可以担此重任,用覆蓋的就好
但不同程式间 multitask, 就不要写入端开档/清空,还没写入,读取端就来读耶
那我又有其他困扰了
》何时要用此值,才去问那块内存
Redis 不就替我做了这事
而且可以跨电脑
档案的话,不知有没有一定要关档(所以保证写入完毕),其他程式才能开档的检查
这问题在 multi-thread 里即使是内存变量,也是很常面对的
但用 python 我一直都不用理,因为 python 的多工有个 GIL 在,它的 ATOM 太大了
若在 C,我就吃了不少亏,常常要设 critical section
而 Redis 应该就是跨电脑很适合吧..
当有多台电脑跑 relay.py,
他们何时需要资料,就何时去问 sensor.py 那台电脑
而不是 sensor.py 经常主动推播,漏收讯息也不好
不想收,它也一直推给所有来注册的电脑
(喔,mqtt 采订阅制,不想收就不订阅,困扰没那么大)
很值得我参考。
作者: Arataki (Get busy living)   2023-01-26 15:58:00
Import watchdog to reopen socket time out or broken
作者: DavisX   2023-01-26 16:37:00
有没考虑用EPICS去弄device并存入PV 再用PYEPICS去读
作者: Arataki (Get busy living)   2023-01-26 18:06:00
EPICS 牛刀杀小鸡,不过用它真的没问题,但是要先学会它
作者: Hsins (翔)   2023-01-26 19:48:00
Process Variables
作者: lycantrope (阿宽)   2023-01-27 21:48:00
mmap
作者: TakiDog (多奇狗)   2023-01-28 04:50:00
SharedMemory(mmap) 你的例子只是差了一个lockmultiprocessing 先去看完
作者: leolarrel (真.粽子无双)   2023-01-30 10:05:00
ZMQ or DBUS , 供参

Links booklink

Contact Us: admin [ a t ] ucptt.com