我不确定while True:
方法中指定的run()
条件是否必要。
我已经使用和没有while
条件执行了这段代码,它运行正常。
但我仍然想知道使用它的目的。任何想法为什么应该或不应该使用?
from PyQt4 import QtCore, QtGui
import Queue as queue
app = QtGui.QApplication([])
theQueue = queue.Queue()
class TheThread(QtCore.QThread):
def __init__(self, theQueue, parent=None):
QtCore.QThread.__init__(self, parent)
self.theQueue = theQueue
def run(self):
while True:
task = self.theQueue.get()
self.sleep(1)
self.theQueue.task_done()
threads=[]
for i in range(1, 3):
thread = TheThread(theQueue)
threads.append(thread)
thread.start()
for i in range(len(threads)):
theQueue.put(i)
答案 0 :(得分:2)
while True
循环意味着您的线程将继续(理论上)继续运行,阻止task = self.theQueue.get()
调用。如果你使用的是threading.Thread
个对象,这会使你的程序挂起而无法退出,因为Python线程只要它们正在运行就会使主线程保持活动状态,除非你将daemon
属性设置为在启动线程之前为True。但是,因为您正在使用QThreads,程序将在线程仍在运行时退出。当你这样做时,你最终会收到警告:
QThread: Destroyed while thread is still running
QThread: Destroyed while thread is still running
我建议 not 使用while True
循环,因为您的线程只是为了从主线程获取单个消息,并调用wait
(类似于{ {1}})在退出主程序之前对每个线程对象进行操作,以确保它们在主线程退出之前完成:
threading.Thread.join
如果由于某种原因确实需要class TheThread(QtCore.QThread):
def __init__(self, theQueue, parent=None):
QtCore.QThread.__init__(self, parent)
self.theQueue = theQueue
def run(self):
task = self.theQueue.get()
self.sleep(1)
print(task)
self.theQueue.task_done()
threads=[]
for i in range(1, 3):
thread = TheThread(theQueue)
threads.append(thread)
thread.start()
for i in range(len(threads)):
theQueue.put(i)
for t in threads:
t.wait()
循环,请使用sentinel向线程发出信号,告知它们应该退出:
while True