※ 引述《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