Возможные способы изменить значения флага внутри цикла while в python? - PullRequest
0 голосов
/ 25 июня 2018

Итак, моя проблема заключается в следующем: я запускаю цикл while, который будет выполнять Function1 каждый раз, Function2 и Function3 будут выполняться только тогда, когда их соответствующие флаги установлены в True, и я хочу иметь возможность изменить эти флаги во время работы цикла .

while brkFlag == False:  
    Function1.run()
    if flag2 == True:
        Function2.run()
    else:
        pass    
    if flag3 == True:
        Function3.run()
    else:
        pass
    if someConditions == True:
        brkFlag = True

В настоящее время я хочу изменить эти флаги с помощью графического интерфейса во время работы цикла, и я пытаюсь сделать это с помощью кнопок и флажков tkinter, но пока безуспешно.

Я также не могу использовать многопоточность или многопроцессорность, поскольку они значительно замедляют скорость цикла (что сейчас едва ли приемлемо, так как сейчас, потому что в каждой функции много вычислений, и мне нужно показать результаты в режиме реального времени).

Редактировать: Похоже, что нет другого выхода, кроме как выполнять многопоточность / обработку.

1 Ответ

0 голосов
/ 25 июня 2018

Простой способ - передать изменяемый контейнер, содержащий флаги, например, список:

flags = [flag2, flag3, someConditions ]
while brkFlag == False:  
    Function1.run(flags)
    if flags[0] == True:
        Function2.run(flags)
    else:
        pass    
    if flags[1] == True:
        Function3.run(flags)
    else:
        pass
    if someConditions == True:     # or if flags[2] == True:
        brkFlag = True

В вызываемом абоненте вы реализуете более или менее:

...
def run(flags):
    ...
    flags[0] = True    # set flag2
    ...
...