<p>最后,我通过采用概述的<a href="http://eli.thegreenplace.net/2011/12/27/python-threads-communication-and-stopping" rel="nofollow">here</a>方法解决了这个问题,我发现这是一个优雅的解决方案。我创建的类如下所示:</p>
<pre class="lang-python prettyprint-override"><code>class UploadThread(threading.Thread):
#input_q and result_q are Queue.Queue objects
def __init__(self, input_q, result_q):
super(UploadThread, self).__init__()
self.input_q = input_q
self.result_q = result_q
self.stoprequest = threading.Event() #threadsafe flag
def run(self):
'''Runs indefinitely until self.join() is called.
As soon as items are placed in the input_q, then the thread will process them until the input_q is emptied.
'''
while not self.stoprequest.isSet(): #stoprequest can be set from the main gui
try:
# Queue.get with timeout to allow checking self.stoprequest
num = self.input_q.get(True, 0.1) #when the queue is empty it waits 100ms before raising the Queue.Empty error
print 'In thread, processing', num
time.sleep(0.5)
self.result_q.put(True) #Indicate to the main thread that an item was successfully processed.
except Queue.Empty as e:
continue
def join(self, timeout=None):
self.stoprequest.set()
super(UploadThread, self).join(timeout)
</code></pre>
<p>在主线程中,创建上载线程,并在输入_q中加载要上载的项。创建了一个QTimer,通过检查结果中的内容来定期检查上传的进度。它还更新进度条。如果在超时时间内没有任何进展,则表明上载连接失败。在</p>
<p>使用的优点排队。排队对象用于线程之间的通信,即可以创建共享同一输入和结果队列的多个线程。在</p>