pythonのマルチプロセスでのデータ送受信についての質問
解決したいこと
pythonでマルチプロセスのプログラムを作っていますが、pipeを使用したデータ受け渡しがうまくいきません
実行ボタンを押すと答えがラベルに連続的に表示されることを目指しています。
解決方法をご教授お願い致します。
発生している問題・エラー
親プロセス(GUI)でデータが受け取れない
子プロセスからのデータ送出はできているようですが、親プロセスでの受信ができません
該当するソースコード
from multiprocessing import Pipe
import multiprocessing as mp
from tkinter import *
from tkinter import ttk
import time
#-------------------------------------------
# コマンドの取得
#-------------------------------------------
def get_cmd():
print('コマンドボタン 押下')
cmd = cmd_get_ent.get().strip()
cmd_get_ent.delete(0, END) # テキストボックスをクリア
cmd_l = [x.strip() for x in cmd.split(',') if not x.strip() == '']
if not(len(cmd_l) == 0):
if cmd_l[0] == '加算':
add_Process(cmd_l)
elif cmd_l[0] == '減算':
pass
print('コマンドボタン 押下処理終了')
# -------------------------------------------
# プロセス 起動
# -------------------------------------------
def add_Process(cmd_l):
print('プロセス作成')
ans_get = mp.Process(name='gps_get', target=add, args=(s_pipe1,cmd_l))
ans_get.daemon = True
ans_get.start()
# print(m_pipe1.recv()) #一回目だけ受信
# -------------------------------------------
# プロセス
# -------------------------------------------
def add(s_pipe1,cmd_l):
for i in range(5):
x=int(cmd_l[1])+int(cmd_l[2])+i
s_pipe1.send(x)
print('データ送出',x)
time.sleep(1)
if __name__ == "__main__":
#
m_pipe1, s_pipe1 = Pipe() # 双方向Pipeを生成
# rootの作成
root = Tk()
# Frameの作成
frame = ttk.Frame(root, padding=1,borderwidth=10, relief='solid')
frame.pack(fill='x')
#
var1 = StringVar()
var1.set("ans=")
lat_lbl = ttk.Label(frame,textvariable=var1, relief='solid')
lat_lbl.pack(fill='x', pady=5)
#
cmd_get_ent = ttk.Entry(frame)
cmd_get_ent.pack(fill='x', pady=5)
#
cmd_get_btn = ttk.Button(frame,command=get_cmd, text="実 行")
cmd_get_btn.pack(fill='x', pady=5)
cmd_get_ent.insert(0,'加算,1,2')
# ループ実行
root.mainloop()
自分で試したこと
・ラベルのStringVarをグローバル変数にしてみた
・データ受信は子プロセスを作成した関数のみで受信できた
0