def METHOD_NAME(self):
    if self.queue is None:
        yield self.init_queue()
    if not len(self.queue):
        returnD(None)
    status = yield self.get_scrapyd_status()
    if not status or status["pending"] > 0 or status["running"] >= self.max_simul_crawls:
        returnD(None)
    # Add some random wait to allow possible concurrent Hyphe instance
    # to compete for ScrapyD's empty slots
    yield deferredSleep(1./randint(4,20))
    # Order jobs by corpus with less currently running crawls then age
    ordered = sorted(self.queue.items(), key=lambda x: \
      float("%s.%s" % (status.get(x[1]["corpus"], 0), x[1]["timestamp"])))
    job_id, job = ordered[0]
    args = job["crawl_arguments"]
    res = yield self.send_scrapy_query('schedule', {"project": args["project"], "spider": args["spider"], "setting": args["setting"], "job_id": job_id})
    ts = now_ts()
    if is_error(res):
        logger.msg("WARNING: error sending job %s to ScrapyD: %s" % (job, res))
        if job_id in self.queue:
            self.queue[job_id]['timestamp'] = ts    # let it retry a bit later
    else:
        yield self.db.update_job(job["corpus"], job_id, res['jobid'], ts)
        yield self.db.add_log(job["corpus"], job_id, "CRAWL_SCHEDULED", ts)
        if job_id in self.queue:
            del(self.queue[job_id])