summaryrefslogtreecommitdiff
path: root/rq/worker_registration.py
diff options
context:
space:
mode:
Diffstat (limited to 'rq/worker_registration.py')
-rw-r--r--rq/worker_registration.py32
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)}