需要线程来阻止下一条代码行,但不需要其他线程

时间:2019-01-02 00:54:22

标签: python multithreading blocking

我有一个使用线程连接到我的数据库以检查用户是否存在于数据库中的方法。我有另一个线程负责更新GUI。我需要数据库线程来阻止它之后的代码,直到它终止为止,而不是阻止GUI线程。我如何做到这一点?

我已经尝试过使用join命令,但是它阻塞了GUI线程。而且我尝试过使用一个不执行任何操作的循环,直到数据库线程不活动为止,但它也会阻塞。

#GUI Thread
self.guiThread = threading.Thread(group= None, target=self.guiLoop)
self.guiThread.start()

#GUI Method
def guiLoop(self):
    while True:
        self.Update()

#Login Button Method
def onLoginButtonClick(self, event):
    id = self.idBox.GetValue()
    self.idBox.SetValue("")
    password = self.passwordBox.GetValue()
    self.passwordBox.SetValue("")
    self.retList = []
    self.testBool = False
    dbThread = threading.Thread(group= None, target=self.checkUser, args=(id, password, self.retList))
    dbThread.start()
    #TODO Blocking
    print (self.retList)

#Database Thread Method
def checkUser(self, id, password, retList):
    self.retList = DB.checkUser(id,password)

DB.checkUser是一种检查数据库是否有用户的方法,并返回包含用户信息的列表,如果数据库中没有该用户,则返回一个空列表。

1 个答案:

答案 0 :(得分:0)

得到解决方案-Wxpython的延迟反应类。