В соответствии с тем, что реализация Python полагается на GIL , даже с использованием потоков или таймера вы не сможете сделать что-то (потенциально дорогостоящее) в вашей программе, не влияя на глобальную производительность программа.
Я предлагаю вам взглянуть на многопроцессорный модуль , чтобы обойти это ограничение. Используя этот модуль, вы больше не будете использовать потоки (на которые влияет GIL), а процессы (на которые не влияет GIL).
Возможно, вы могли бы создать подпроцесс, который будет включать таймер для обновления каждые 500 мс, когда основной процесс продолжит свою работу.
Затем вы позволите системе выполнять работу по балансировке программ, и это может быть лучше с точки зрения отзывчивости (особенно в многоядерной среде)