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.
81 lines
2.5 KiB
Python
81 lines
2.5 KiB
Python
#!/usr/bin/env python
|
|
import os
|
|
import sys
|
|
import argparse
|
|
import logging
|
|
import logging.config
|
|
|
|
from rq import Queue, Worker
|
|
from rq.logutils import setup_loghandlers
|
|
from redis.exceptions import ConnectionError
|
|
from rq.contrib.legacy import cleanup_ghosts
|
|
from rq.scripts import add_standard_arguments
|
|
from rq.scripts import setup_redis
|
|
from rq.scripts import read_config_file
|
|
from rq.scripts import setup_default_arguments
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def parse_args():
|
|
parser = argparse.ArgumentParser(description='Starts an RQ worker.')
|
|
add_standard_arguments(parser)
|
|
|
|
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('--quiet', '-q', action='store_true', default=False, help='Show less output')
|
|
parser.add_argument('--sentry-dsn', action='store', default=None, metavar='URL', help='Report exceptions to this Sentry DSN')
|
|
parser.add_argument('queues', nargs='*', 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
|
|
|
|
settings = {}
|
|
if args.config:
|
|
settings = read_config_file(args.config)
|
|
|
|
setup_default_arguments(args, settings)
|
|
|
|
# Other default arguments
|
|
if args.sentry_dsn is None:
|
|
args.sentry_dsn = settings.get('SENTRY_DSN',
|
|
os.environ.get('SENTRY_DSN', None))
|
|
|
|
if args.verbose and args.quiet:
|
|
raise RuntimeError("Flags --verbose and --quiet are mutually exclusive.")
|
|
|
|
if args.verbose:
|
|
level = 'DEBUG'
|
|
elif args.quiet:
|
|
level = 'WARNING'
|
|
else:
|
|
level = 'INFO'
|
|
setup_loghandlers(level)
|
|
setup_redis(args)
|
|
|
|
cleanup_ghosts()
|
|
|
|
try:
|
|
queues = map(Queue, args.queues)
|
|
w = Worker(queues, name=args.name)
|
|
|
|
# Should we configure Sentry?
|
|
if args.sentry_dsn:
|
|
from raven import Client
|
|
from rq.contrib.sentry import register_sentry
|
|
client = Client(args.sentry_dsn)
|
|
register_sentry(client, w)
|
|
|
|
w.work(burst=args.burst)
|
|
except ConnectionError as e:
|
|
print(e)
|
|
sys.exit(1)
|