作者as30385438 (LCH)
看板Python
标题Re: [问题] py程式之间的值如何传递
时间Thu Dec 15 23:40:28 2022
※ 引述《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
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 106.1.229.169 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1671118830.A.5BC.html
1F:推 Schottky: file 还有一招,档案存在 ramdisk 12/16 17:03
2F:推 tzouandy2818: 推 很实际的建议 12/17 11:00
3F:推 venomsoul: 受教了 12/19 23:09
4F:推 blazers08: 推 12/20 09:06
5F:推 smartree: 受教了 12/26 23:02
6F:推 KingLHU: 初学者,收益良多 01/03 12:13
7F:推 vvind: 推 01/11 13:14
8F:推 HuangJC: 档案的做法原本以为可以,但刚实验有点问题... 01/26 15:55