Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在GUI应用程序中何时调用thread.join_Python_Python 3.x_Wxpython_Python Multithreading - Fatal编程技术网

Python 在GUI应用程序中何时调用thread.join

Python 在GUI应用程序中何时调用thread.join,python,python-3.x,wxpython,python-multithreading,Python,Python 3.x,Wxpython,Python Multithreading,我有一个GUI应用程序,它加载一个combobox,并启动一个线程来读取一些数据并将其加载到combobox中。我不想让读取阻塞,这样其他GUI组件就可以加载了 调用thread.start()后,何时调用thread.join()?根据我的理解,join()等待线程完成,我不希望这样,我希望启动线程并允许加载所有其他组件。不调用join()是否是一种不好的做法如果不需要它的功能来等待线程完成,那么不调用join()是完全可以的 顺便说一句:在GUI应用程序的主线程(所有GUI事件都发生在启动时

我有一个GUI应用程序,它加载一个combobox,并启动一个线程来读取一些数据并将其加载到combobox中。我不想让读取阻塞,这样其他GUI组件就可以加载了


调用
thread.start()
后,何时调用
thread.join()
?根据我的理解,
join()
等待线程完成,我不希望这样,我希望启动线程并允许加载所有其他组件。不调用
join()

是否是一种不好的做法如果不需要它的功能来等待线程完成,那么不调用
join()
是完全可以的


顺便说一句:在GUI应用程序的主线程(所有GUI事件都发生在启动时自动创建的线程)中,调用任何休眠或等待的函数都是不好的做法,因为GUI在等待时没有反应(冻结)。

不调用
join()
如果您不需要它的功能来等待线程完成

顺便说一句:在GUI应用程序的主线程中(在开始时自动创建的线程,所有GUI事件都发生在该线程中),调用任何休眠或等待的函数是不好的做法,因为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()