Moves unpacking task from Worker to Pusher.

Makes more sense and gives us more options to work with control queues from the pusher in the future. Does not seem to affect performance.
This commit is contained in:
Ilan Steemers
2015-07-31 12:29:10 +02:00
parent a13b959bfb
commit f75593aebb
2 changed files with 14 additions and 13 deletions
+8 -8
View File
@@ -315,7 +315,13 @@ def pusher(task_queue, event, list_key=Conf.Q_LIST, r=redis_client):
sleep(10) sleep(10)
break break
if task: if task:
task_queue.put(task[1]) # unpack the task
try:
task = signing.SignedPackage.loads(task[1])
except (TypeError, signing.BadSignature) as e:
logger.error(e)
continue
task_queue.put(task)
logger.debug(_('queueing from {}').format(list_key)) logger.debug(_('queueing from {}').format(list_key))
if event.is_set(): if event.is_set():
break break
@@ -351,16 +357,10 @@ def worker(task_queue, result_queue, timer, timeout=Conf.TIMEOUT):
db.close_old_connections() db.close_old_connections()
task_count = 0 task_count = 0
# Start reading the task queue # Start reading the task queue
for pack in iter(task_queue.get, 'STOP'): for task in iter(task_queue.get, 'STOP'):
result = None result = None
timer.value = -1 # Idle timer.value = -1 # Idle
task_count += 1 task_count += 1
# unpickle the task
try:
task = signing.SignedPackage.loads(pack)
except (TypeError, signing.BadSignature) as e:
logger.error(e)
continue
# Get the function from the task # Get the function from the task
logger.info(_('{} processing [{}]').format(name, task['name'])) logger.info(_('{} processing [{}]').format(name, task['name']))
f = task['func'] f = task['func']
+6 -5
View File
@@ -40,7 +40,7 @@ def async(func, *args, **kwargs):
# sign it # sign it
pack = signing.SignedPackage.dumps(task) pack = signing.SignedPackage.dumps(task)
if sync: if sync:
return _sync(task['id'], pack) return _sync(pack)
# push it # push it
redis.rpush(list_key, pack) redis.rpush(list_key, pack)
logger.debug('Pushed {}'.format(tag)) logger.debug('Pushed {}'.format(tag))
@@ -150,13 +150,14 @@ def delete_group(group_id, tasks=False):
return Task.delete_group(group_id, tasks) return Task.delete_group(group_id, tasks)
def _sync(task_id, pack): def _sync(pack):
"""Simulate a package travelling through the cluster.""" """Simulate a package travelling through the cluster."""
task_queue = Queue() task_queue = Queue()
result_queue = Queue() result_queue = Queue()
task_queue.put(pack) task = signing.SignedPackage.loads(pack)
task_queue.put(task)
task_queue.put('STOP') task_queue.put('STOP')
cluster.worker(task_queue, result_queue, Value('b', -1)) cluster.worker(task_queue, result_queue, Value('f', -1))
result_queue.put('STOP') result_queue.put('STOP')
cluster.monitor(result_queue) cluster.monitor(result_queue)
return task_id return task['id']