When converting comics, run only a single conversion job at a time, since comic conversion uses all CPU cores anyway

This commit is contained in:
Kovid Goyal 2010-08-14 13:29:53 -06:00
parent fa7f05ec41
commit 03dc0060aa

View File

@ -103,7 +103,7 @@ class Server(Thread):
authkey=self.auth_key, backlog=4) authkey=self.auth_key, backlog=4)
self.add_jobs_queue, self.changed_jobs_queue = Queue(), Queue() self.add_jobs_queue, self.changed_jobs_queue = Queue(), Queue()
self.kill_queue = Queue() self.kill_queue = Queue()
self.waiting_jobs, self.processing_jobs = deque(), deque() self.waiting_jobs, self.processing_jobs = [], deque()
self.pool, self.workers = deque(), deque() self.pool, self.workers = deque(), deque()
self.launched_worker_count = 0 self.launched_worker_count = 0
self._worker_launch_lock = RLock() self._worker_launch_lock = RLock()
@ -167,7 +167,7 @@ class Server(Thread):
job = self.add_jobs_queue.get(True, 0.2) job = self.add_jobs_queue.get(True, 0.2)
if job is None: if job is None:
break break
self.waiting_jobs.append(job) self.waiting_jobs.insert(0, job)
except Empty: except Empty:
pass pass
@ -202,8 +202,9 @@ class Server(Thread):
pass pass
# Start waiting jobs # Start waiting jobs
if len(self.pool) > 0 and len(self.waiting_jobs) > 0: sj = self.suitable_waiting_job()
job = self.waiting_jobs.pop() if sj is not None:
job = self.waiting_jobs.pop(sj)
job.start_time = time.time() job.start_time = time.time()
if job.kill_on_start: if job.kill_on_start:
job.duration = 0.0 job.duration = 0.0
@ -224,6 +225,17 @@ class Server(Thread):
except Empty: except Empty:
break break
def suitable_waiting_job(self):
available_workers = len(self.pool)
if available_workers == 0:
return None
for i, job in enumerate(self.waiting_jobs):
if job.core_usage == -1:
if available_workers >= self.pool_size:
return i
elif job.core_usage <= available_workers:
return i
def kill_job(self, job): def kill_job(self, job):
self.kill_queue.put(job) self.kill_queue.put(job)