Наткнулся на странное взаимодействие при настройке графического интерфейса с 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 мс.
Почему печать из одного потока приводит к значительному ускорению другого потока.