mirror of https://github.com/peter4431/rq.git
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			78 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
#!/usr/bin/env python
 | 
						|
import sys
 | 
						|
import argparse
 | 
						|
import logbook
 | 
						|
import redis
 | 
						|
from logbook import handlers
 | 
						|
from rq import use_connection, Queue, Worker
 | 
						|
from redis.exceptions import ConnectionError
 | 
						|
 | 
						|
 | 
						|
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(args):
 | 
						|
    if args.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 parse_args():
 | 
						|
    parser = argparse.ArgumentParser(description='Starts an RQ worker.')
 | 
						|
    parser.add_argument('--host', '-H', default='localhost', help='The Redis hostname (default: localhost)')
 | 
						|
    parser.add_argument('--port', '-p', type=int, default=6379, help='The Redis portnumber (default: 6379)')
 | 
						|
    parser.add_argument('--db', '-d', type=int, default=0, help='The Redis database (default: 0)')
 | 
						|
 | 
						|
    parser.add_argument('--burst', '-b', action='store_true', default=False, help='Run in burst mode (quit after all work is done)')
 | 
						|
    parser.add_argument('--name', '-n', default=None, help='Specify a different name')
 | 
						|
    parser.add_argument('--path', '-P', default='.', help='Specify the import path.')
 | 
						|
    parser.add_argument('--verbose', '-v', action='store_true', default=False, help='Show more output')
 | 
						|
    parser.add_argument('queues', nargs='*', default=['default'], help='The queues to listen on (default: \'default\')')
 | 
						|
 | 
						|
    return parser.parse_args()
 | 
						|
 | 
						|
 | 
						|
def main():
 | 
						|
    args = parse_args()
 | 
						|
 | 
						|
    if args.path:
 | 
						|
        sys.path = args.path.split(':') + sys.path
 | 
						|
 | 
						|
    setup_loghandlers(args)
 | 
						|
 | 
						|
    # Setup connection to Redis
 | 
						|
    redis_conn = redis.Redis(host=args.host, port=args.port, db=args.db)
 | 
						|
    use_connection(redis_conn)
 | 
						|
    try:
 | 
						|
        queues = map(Queue, args.queues)
 | 
						|
        w = Worker(queues, name=args.name)
 | 
						|
        w.work(burst=args.burst)
 | 
						|
    except ConnectionError as e:
 | 
						|
        print(e)
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    main()
 |