'Performs the work of a ProgressTrackerThread.'

def PerformWork(self):

    while (not self.exit_flag):
        try:
            item = self.progress_queue.get(block=True, timeout=1.0)
        except Queue.Empty:
            continue
        if (item == _THREAD_SHOULD_EXIT):
            break
        if ((item.state == STATE_READ) and (item.progress_key is None)):
            item.progress_key = self.db.StoreKeys(item.kind, item.key_start, item.key_end)
        else:
            assert (item.progress_key is not None)
            self.UpdateProgress(item)
        item.progress_event.set()
        self.progress_queue.task_done()
    self.db.ThreadComplete()
