我正在开发一个带有独立线程的gui项目。当用户单击按钮时,将触发一个函数,该函数将数据发送到队列并启动另一个线程。然后,另一个线程从队列中获取数据并向其中添加新数据。 gui将在哪里获取该数据并执行某些操作。但这卡住了,说队列是空的?为什么会这样,我该如何解决?
def click():
if self.uN.get() and self.pW.get():
self.q.put("LOGIN")
self.q.put(self.uN.get() + "," + self.pW.get())
else:
self.q.put("eFi")
con = Connect(self.q)
con.setDaemon(True)
con.start()
time.sleep(1)
while True:
root.update()
try:
data = self.q.get(False)
except queue.Empty:
pass
else:
print(data + "+")
if data == "Fcon":
tkMessageBox.showerror("ERROR!", "Failed to connect to the server!")
elif data == "nCre":
tkMessageBox.showerror("ERROR!", "A text field is empty!")
elif data == "Gcon":
for item in root.winfo_children():
item.destroy()
self.mScreen()
else:
print("?")
print('!')
break
这是其他线程代码:
class Connect(Thread):
def __init__(self, q):
Thread.__init__(self)
self.s = socket.socket()
self.q = q
def run(self):
while True:
try:
data = self.q.get()
except Exception as e:
pass
else:
if data == "LOGIN":
self.login()
elif data == "eFi":
self.q.put("nCre")
print("??????")
def login(self):
info = self.q.get().split(",")
self.q.put("Gcon")
print("GOD")
答案 0 :(得分:0)
该问题是由两个线程访问同一队列引起的,一个线程会在适当的线程能够访问该信息之前先获取信息。为了解决这个问题,我为每个线程设置了两个队列。