Cuándo llamar a thread.join en una aplicación GUI

import wx
import json
import queue
from collections import namedtuple
import threading


class MyDialog(wx.Frame):

    def __init__(self, parent, title):
        self.no_resize = wx.DEFAULT_FRAME_STYLE & ~ (wx.RESIZE_BORDER | wx.MAXIMIZE_BOX)
        wx.Frame.__init__(self, parent, title=title, size=(500, 450),style = self.no_resize)

        self.panel = wx.Panel(self, size=(250, 270))
        self.emp_selection = wx.ComboBox(self.panel, -1, pos=(40, 50), size=(200,100))
        self.start_read_thread()

        #code to load other GUI components             

        self.Centre()
        self.Show(True)


    def read_employees(self, read_file):
        list_of_emails = queue.Queue()
        with open(read_file) as f_obj:
            employees = json.load(f_obj)
        list_of_emails = [empEmail for empEmail in employees.keys()]
        wx.CallAfter(self.emp_selection.Append, list_of_emails)

    def start_read_thread(self):
        filename = 'employee.json'
        empThread = threading.Thread(target=self.read_employees, args=(filename,))
        empThread.start()

Tengo una aplicación GUI que carga un cuadro combinado y comienza un hilo para leer algunos datos y cargarlos en el cuadro combinado. No quiero que la lectura se bloquee, de modo que los otros componentes de la GUI puedan cargarse.

Despues de llamarthread.start() cuando es apropiado llamarthread.join()? Desde mi entendimiento,join() espera a que se complete el subproceso, no quiero eso, quiero iniciar el subproceso y permitir que se carguen todos los demás componentes. ¿Es una mala práctica no llamar?join()

Respuestas a la pregunta(1)

Su respuesta a la pregunta