worker threads are daemonic, so they don't hold the python process alive once the main thread exits.