Наблюдатели по многопроцессорности - PullRequest
2 голосов
/ 06 февраля 2020

Я делаю GUI, который требует многопроцессорной обработки. Итак, у меня есть один процесс GUI и другой процесс, который работает вечно, и это планировщик. Они используют планировщик var (который хранит события и управляет ими) с помощью manager.list (). Когда GUI получает данные от пользователя (нажимает кнопку), он добавляет событие в планировщик и обновляет эту переменную для последующих процессов. В другом процессе, который запускает события планировщика, когда одно событие завершается sh, оно также изменяет планировщик var. Моя проблема в том, что когда это происходит, мне нужно получить уведомление для другого процесса, чтобы перезагрузить виджеты. Я пытался реализовать Observer , но из-за многопроцессорности я не смог этого сделать.

Знаете ли вы, как это сделать?

1 Ответ

1 голос
/ 06 февраля 2020

Я добился этого, выполнив следующее: -создание двух manager.list, одного для совместного использования планировщика var, второго для обмена булевым списком.

После завершения задачи sh Я добавляю для задачи Истина. Таким образом, используя функцию refre sh, которая проверяет этот 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...