Add job queue priority support

This commit is contained in:
Roberto Rosario
2012-08-05 22:39:44 -04:00
parent 7c879a6546
commit a97a048d9c
5 changed files with 84 additions and 8 deletions

View File

@@ -1,6 +1,7 @@
from __future__ import absolute_import
import logging
import psutil
from lock_manager import Lock, LockError
from lock_manager.decorators import simple_locking
@@ -13,7 +14,7 @@ from .literals import JOB_QUEUE_STATE_STARTED
LOCK_EXPIRE = 10
MAX_CPU_LOAD = 90.0
MAX_MEMORY_USAGE = 90.0
NODE_MAX_WORKERS = 1
NODE_MAX_WORKERS = len(psutil.cpu_percent(interval=0.1, percpu=True)) # Get CPU/cores count
logger = logging.getLogger(__name__)
@@ -27,21 +28,19 @@ def job_queue_poll():
lock = Lock.acquire_lock(lock_id, LOCK_EXPIRE)
except LockError:
pass
except Exception:
lock.release()
raise
else:
node = Node.objects.myself()
if node.cpuload < MAX_CPU_LOAD and node.memory_usage < MAX_MEMORY_USAGE and node.worker_set.count()<=NODE_MAX_WORKERS:
if node.cpuload < MAX_CPU_LOAD and node.memory_usage < MAX_MEMORY_USAGE and node.worker_set.count() < NODE_MAX_WORKERS:
for job_queue in JobQueue.objects.filter(state=JOB_QUEUE_STATE_STARTED):
try:
job_item = job_queue.get_oldest_pending_job()
job_item.run()
break;
except JobQueueNoPendingJobs:
logger.debug('no pending jobs for job queue: %s' % job_queue)
else:
logger.debug('CPU load or memory usage over limit')
finally:
lock.release()