To my understanding, Omniverse uses async programming (coroutines) to keep the UI interactive, I suggest you take a look at the code I posted in my question here why does multiprocessing only works with fork it could work for your use case.
Another thing to keep in mind is, in Python threads don’t really execute in parallel, rather there is only one thread running at a time but Python switch between threads giving the illusion of running things in parallel. This means multi-threading doesn’t always offer any increase in performance, you probably want to look at multi-processing instead (like the example code above).