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

楼主: as30385438 (LCT)   2022-12-15 23:40:28
※ 引述《XiaoLuu5566 (洨噜)》之铭言:
: 我有
: A.py
: B.py
: C.py
: 都在同一台电脑执行
: A负责计算答案 给出ans
: B跟C负责抄ans
: 目前的做法是
: A如果计算出来 就写入txt档
: B跟C就是每0.1秒读取txt档
: 但是这样会有时间差
: 而且多了 写入->等待 -> 读取的工作
: 一直读取硬盘不晓得会不会伤硬件
: 有没有更专业的方法
跨程式通讯叫做IPC (Inter Process Communication)
原串中提到的redis, socket, file, pipe等等方式都是IPC的手段
然后没事不要弄IPC,会有很多意想不到的问题
除非你很清楚自己在做什么
虽然不知道详细资讯,但我的直觉是你的情境还是满单纯的
如果一个需求有多种方法可以做到,而你不知道要选哪种
95%都是选最简单的就好
以这个case来说,真的就是把A包成package就好
除非有什么历史因素不能动老程式
想像中的成品大概长这样
import A
import B
import C
A.register_callback(B.handle)
A.register_callback(C.handle)
A.start()
start里面要用sync还是async都无所谓
至于IPC会有什么问题,我随便举两个
1.如果redis server挂掉怎么办
A要继续跑吗? 把这段时间跑的结果存在memory
等redis复活后再一次送进去?
B和C的error handling又该怎么做呢?
2. 如果B或C挂掉怎么办? 他们重新启动后要怎么记得上一次读到哪?
还是他们要有自己的storage?
真的要选我反而推荐file
reids毕竟是外部媒介,多一个元件要维护,得到的好处也不明显
然后redis有pub/sub
file有OS提供的filesystem event (可以查watchdog套件)
都不需要long polling就可以收到change event
file在写入时都是append的话效能不会差到哪
也不用担心什么硬盘损坏问题,除非你每秒几GB上下,不然现代硬盘没那么脆弱
你用redis它一样有自己的persistant storage机制会把资料写入disk
作者: Schottky (顺风相送)   2022-12-16 17:03:00
file 还有一招,档案存在 ramdisk
作者: tzouandy2818 (Naked Bear)   2022-12-17 11:00:00
推 很实际的建议
作者: venomsoul (不怕太太)   2022-12-19 23:09:00
受教了
作者: blazers08 (我是传奇)   2022-12-20 09:06:00
作者: smartree (阿路)   2022-12-26 23:02:00
受教了
作者: KingLHU (张大师)   2021-01-03 12:13:00
初学者,收益良多
作者: vvind (wind)   2021-01-11 13:14:00
作者: HuangJC (吹笛牧童)   2021-01-26 15:55:00
档案的做法原本以为可以,但刚实验有点问题...

Links booklink

Contact Us: admin [ a t ] ucptt.com