Rather than juggling your parent’s __init__ on another thread, it’s usually clearer to:
1. Keep all of your object–initialization in the main thread (i.e. call super().__init__() synchronously).
2. Defer any ZMQ socket creation that you actually use in the background thread into the thread itself.