diff options
Diffstat (limited to 'rq/worker_registration.py')
| -rw-r--r-- | rq/worker_registration.py | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/rq/worker_registration.py b/rq/worker_registration.py index a5c240b..5c2b578 100644 --- a/rq/worker_registration.py +++ b/rq/worker_registration.py @@ -1,34 +1,42 @@ -# from .worker import Worker +from .compat import as_text -workers_by_queue_key = 'rq:workers:%s' +WORKERS_BY_QUEUE_KEY = 'rq:workers:%s' +REDIS_WORKER_KEYS = 'rq:workers' def register(worker, pipeline=None): - """ - Store worker key in Redis data structures so we can easily discover - all active workers. - """ + """Store worker key in Redis so we can easily discover active workers.""" connection = pipeline if pipeline is not None else worker.connection connection.sadd(worker.redis_workers_keys, worker.key) for name in worker.queue_names(): - redis_key = workers_by_queue_key % name + redis_key = WORKERS_BY_QUEUE_KEY % name connection.sadd(redis_key, worker.key) def unregister(worker, pipeline=None): - """ - Remove worker key from Redis. - """ + """Remove worker key from Redis.""" if pipeline is None: connection = worker.connection._pipeline() else: connection = pipeline - + connection.srem(worker.redis_workers_keys, worker.key) for name in worker.queue_names(): - redis_key = workers_by_queue_key % name + redis_key = WORKERS_BY_QUEUE_KEY % name connection.srem(redis_key, worker.key) if pipeline is None: connection.execute() + + +def get_keys(queue=None, connection=None): + """Returns a list of worker keys for a queue""" + if queue: + redis = queue.connection + redis_key = WORKERS_BY_QUEUE_KEY % queue.name + else: + redis = connection + redis_key = REDIS_WORKER_KEYS + + return {as_text(key) for key in redis.smembers(redis_key)} |
