[Pythonメモ] 複数のプロセスを同時に実行。プロセス間で変数を共有する方法

やりたいこと
2つのプロセスを同時に実行。プロセスBから、プロセスAの変数をたまーに覗きたい。

具体的には、以下です。

プロセスA:5秒ごとに温度を測定し、リレーのオンオフ。制御プロセス

プロセスB: 10分ごとにデータ採取やグラフの描写。データロギングプロセス

multiprocessingで解決しました。

multiprocessingを使ってみた

Valueオブジェクトというものを作って、その中に入れた値がプロセス間で共有されています。

from multiprocessing import Process, Value

class ProcessA:
    
    def __init__(self):
        コンストラクタ
    
    def start(self, a):
        while True:

            温度を測る適当な処理

            #スレッド間で共有の変数に値を入れる
            #(今回は、self._CurrentTempに温度が入っている)
            a.value = self._CurrentTemp 

            time.sleep(5)

class ProcessB:
     def __init__(self):
        コンストラクタ
    
     def start(self, a)
        while True:
            #プロセスAで代入した温度をプロセスBで読み出す
            print(a.value)
     
            time.sleep(600)

#メイン
if __name__=='__main__':

    #スレッド間で値を共有するためのオブジェクトを生成(valueオブジェクト)
    #第一引数はデータ型。"d"は小数点型、他にも"i"は整数型、他にもあるはず
    #第二引数は初期値。
    a = Value("d",20)

    ProcessA = ProcessA()
    ProcessB = ProcessB()

    #関数を登録。()はいらない。関数の引数に合わせて、argsを設定。
    #argsでvalueオブジェクトを関数に渡す。
    p1 = Process(target=ProcessA.start, args=[a])
    p2 = Process(target=DataLogger.start, args=[a])

    #マルチプロセスの開始
    p1.start()
    p2.start()

SNSでもご購読できます。