多处理观察者
Observers on multiprocessing
我正在做一个需要多处理的 GUI。所以我有一个进程是 GUI,另一个进程永远是 运行,它是一个调度程序。他们通过 manager.list() 共享 var 调度程序(保存事件并管理它们)。
当 GUI 接收来自用户的输入(单击按钮)时,它会在调度程序上添加一个事件并为两个进程更新此变量。
在运行调度程序事件的另一个进程上,当一个事件完成时,它也会修改 var 调度程序。
我的问题是,当它发生时,我需要通知其他进程才能重新加载小部件。我试图实现一个 Observer 但由于多处理我无法这样做。
你知道怎么做吗?
我通过执行以下操作实现了它:-创建两个 manager.list 一个用于共享调度程序变量,第二个用于共享布尔列表。
任务完成后,我向任务添加一个 True。因此,通过使用检查此 manager.list() 的函数刷新来找到里面的 True。一旦找到 True,它就会重置列表并重新加载小部件。
'''SUPPORT FUCTIONS TO TREAT THE MANAGER.LIST'''
def getupdate(schrec):
if len(schrec)>0:
return schrec[-1]
def loadupdate(schrec,sch):
schrec[:]=[]
schrec.append(sch)
def clear_fogt(ogtrec):
ogtrec[:]=[]
ogtrec.append(False)
'''WAITS UNTIL FIND True INSIDE ogtrec ( that is a manager.list() )'''
def refresh():
if True in ogtrec:
clear_fogt(ogtrec)
plot_scheduler()
root.after(1000, refresh)
print('refresh')
'''RUNS THE SCHEDULER'''
def sched_run(schrec,ogtrec):
while True:
#get last update of scheduler var
scheduler = getupdate(schrec)
while len(scheduler.og) == 0:
time.sleep(0.5)
#get last update of scheduler var
scheduler = getupdate(schrec)
print('Scheduler list not empty')
#reload widg some bool change value
ogtrec.append(True)
#RUN
scheduler.send_task_rob()
print('Task is executing')
print(simulation_robot_working(scheduler))
time.sleep(simulation_robot_working(scheduler))
scheduler.check_timing()
print('Checked')
#get last update of scheduler var
scheduler = getupdate(schrec)
scheduler.finish_og()
print('OG updated')
#update scheduler value
loadupdate(schrec, scheduler)
#reload widg
ogtrec.append(True)
print('finished')
print(scheduler.og)
我正在做一个需要多处理的 GUI。所以我有一个进程是 GUI,另一个进程永远是 运行,它是一个调度程序。他们通过 manager.list() 共享 var 调度程序(保存事件并管理它们)。 当 GUI 接收来自用户的输入(单击按钮)时,它会在调度程序上添加一个事件并为两个进程更新此变量。 在运行调度程序事件的另一个进程上,当一个事件完成时,它也会修改 var 调度程序。 我的问题是,当它发生时,我需要通知其他进程才能重新加载小部件。我试图实现一个 Observer 但由于多处理我无法这样做。
你知道怎么做吗?
我通过执行以下操作实现了它:-创建两个 manager.list 一个用于共享调度程序变量,第二个用于共享布尔列表。
任务完成后,我向任务添加一个 True。因此,通过使用检查此 manager.list() 的函数刷新来找到里面的 True。一旦找到 True,它就会重置列表并重新加载小部件。
'''SUPPORT FUCTIONS TO TREAT THE MANAGER.LIST'''
def getupdate(schrec):
if len(schrec)>0:
return schrec[-1]
def loadupdate(schrec,sch):
schrec[:]=[]
schrec.append(sch)
def clear_fogt(ogtrec):
ogtrec[:]=[]
ogtrec.append(False)
'''WAITS UNTIL FIND True INSIDE ogtrec ( that is a manager.list() )'''
def refresh():
if True in ogtrec:
clear_fogt(ogtrec)
plot_scheduler()
root.after(1000, refresh)
print('refresh')
'''RUNS THE SCHEDULER'''
def sched_run(schrec,ogtrec):
while True:
#get last update of scheduler var
scheduler = getupdate(schrec)
while len(scheduler.og) == 0:
time.sleep(0.5)
#get last update of scheduler var
scheduler = getupdate(schrec)
print('Scheduler list not empty')
#reload widg some bool change value
ogtrec.append(True)
#RUN
scheduler.send_task_rob()
print('Task is executing')
print(simulation_robot_working(scheduler))
time.sleep(simulation_robot_working(scheduler))
scheduler.check_timing()
print('Checked')
#get last update of scheduler var
scheduler = getupdate(schrec)
scheduler.finish_og()
print('OG updated')
#update scheduler value
loadupdate(schrec, scheduler)
#reload widg
ogtrec.append(True)
print('finished')
print(scheduler.og)