As the python implementation relies on the GIL , even with threads or a timer, you cannot do anything (potentially expensive) in your program without affecting the global performance of the program.
I suggest you take a look at multiprocessing to get around this limitation. Using this module, you will no longer use threads (which are affected by GIL), but processes (which are not affected by GIL).
Perhaps you could create a subprocess that will set a timer for updates every 500 ms when the main process continues.
Then you let the system balance the programs, and that might be better in terms of responsiveness (especially in a multi-core environment).
source share