#!/usr/bin/env python import optparse import logbook from logbook import handlers from rq import use_redis, Queue, Worker def parse_args(): parser = optparse.OptionParser() parser.add_option('-b', '--burst', dest='burst', action='store_true', default=False, help='Run in burst mode (quit after all work is done).') parser.add_option('-n', '--name', dest='name', action='store', type='string', default=None, help='Specify a different name.') parser.add_option('-v', '--verbose', dest='verbose', action='store_true', default=False, help='Show more output.') opts, args = parser.parse_args() return (opts, args, parser) def format_colors(record, handler): from rq.utils import make_colorizer if record.level == logbook.WARNING: colorize = make_colorizer('darkyellow') elif record.level >= logbook.ERROR: colorize = make_colorizer('darkred') else: colorize = lambda x: x return '%s: %s' % (record.time.strftime('%H:%M:%S'), colorize(record.msg)) def setup_loghandlers(opts): if opts.verbose: loglevel = logbook.DEBUG formatter = None else: loglevel = logbook.INFO formatter = format_colors import sys handlers.NullHandler(bubble=False).push_application() handler = handlers.StreamHandler(sys.stdout, level=loglevel, bubble=False) if formatter: handler.formatter = formatter handler.push_application() handler = handlers.StderrHandler(level=logbook.WARNING, bubble=False) if formatter: handler.formatter = formatter handler.push_application() def main(): opts, args, parser = parse_args() use_redis() setup_loghandlers(opts) if len(args) == 0: # Use the default queue queues = [Queue()] else: queues = map(Queue, args) w = Worker(queues, name=opts.name) w.work(burst=opts.burst) if __name__ == '__main__': main()