При заправке функция печати ускоряет заправку - PullRequest
0 голосов
/ 05 мая 2019

Наткнулся на странное взаимодействие при настройке графического интерфейса с Tkinter. У меня есть два потока, работающие на заднем плане моей программы, которые запускаются после инициализации графического интерфейса.

def init(top, gui, *args, **kwargs):
    ...
    threading.Thread(target=BackendTask).start()  ## polls sensors
    threading.Thread(target=FrontendTask).start() ## updates GUI

Упрощенные версии обеих задач

def BackendTask():
    global BTaskRefRate
    BTaskRefRate = 0
    while True:
        startTime = time.time()
        for i in range(0, len(strut)):
            ... ## polling sensors
            if i == len(strut):
                BTaskRefRate = time.time() - startTime
                #print(i)
                #sys.stdout.flush()

def FrontendTask():
    global FTaskRefRate
    FTaskRefRate = 0
    while True:
        startTime = time.time()
        ... ## Updates to 50+ widgets
        FTaskRefRate = time.time() - startTime

С print(i) закомментированным в строке 9 в функции BackendTask(). FrontendTask() завершает каждый цикл за ~ 300 мс.

С print(i) без комментариев в строке 9 в функции BackendTask(). FrontendTask() завершает каждый цикл за ~ 50 мс.

С закомментированной печатью или нет BackendTask() работает на ~ 3 мс.

Почему печать из одного потока приводит к значительному ускорению другого потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...