'Start cron runner'

def start(self):

    self.add_jobs()
    try:
        while (not self._stopped):
            if (len(self.pool) < self.poolsize):
                while ((len(self.queue) > 0) and (len(self.pool) < self.poolsize)):
                    cron = self.queue.pop()
                    self.pool.append(cron)
                    if (('hardtree_%s_last' % cron.database) in cache):
                        last_accessed = cache.get(('hardtree_%s_last' % cron.database))
                        if (last_accessed > (time.time() - int(self.qualify_high))):
                            cron.priority = self.priority_high
                            cronlogger.debug(('HIGH    PRIORITY    set    to    ' + unicode(cron)))
                    cron.start()
            if (len(self.queue) == 0):
                cronlogger.info((('Cron    cycle    ' + unicode(self.cycle)) + '    completed.'))
                self.cycle += 1
                if self.noloop:
                    self._stopped = True
                else:
                    self.add_jobs()
                    time.sleep(self.sleeptime)
            cronlogger.debug(('POOL    SIZE:    ' + unicode(len(self.pool))))
            for cron in self.pool:
                cronlogger.debug(((((('POOL    JOB:    ' + unicode(cron)) + ',    PRIORITY    ') + unicode(cron.priority)) + ',    ACTIVE:    ') + unicode(cron.is_alive())))
                if (not cron.is_alive()):
                    self.pool.remove(cron)
                    continue
                if (cron.priority == self.softkill):
                    cron.terminate()
                elif (cron.priority <= self.hardkill):
                    cron.terminate()
                cron.priority -= 1
            time.sleep(self.sleeptime)
    except KeyboardInterrupt:
        self.stop()
