summaryrefslogtreecommitdiffstats
path: root/pym/_emerge/QueueScheduler.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2010-09-03 14:23:58 -0700
committerZac Medico <zmedico@gentoo.org>2010-09-03 14:23:58 -0700
commit35f639f21f285897903d9805569af26c3333300a (patch)
treec4a33f6b3e6d0718d884099e18031a6ca50d3843 /pym/_emerge/QueueScheduler.py
parent12d2ff4f018c826c750896e8085cd53a589a8521 (diff)
downloadportage-35f639f21f285897903d9805569af26c3333300a.tar.gz
portage-35f639f21f285897903d9805569af26c3333300a.tar.bz2
portage-35f639f21f285897903d9805569af26c3333300a.zip
Add support for a timeout argument to QueueScheduler.run() and
use it in IpcDaemonTestCase to implement a 40 second timeout in test cases.
Diffstat (limited to 'pym/_emerge/QueueScheduler.py')
-rw-r--r--pym/_emerge/QueueScheduler.py35
1 files changed, 30 insertions, 5 deletions
diff --git a/pym/_emerge/QueueScheduler.py b/pym/_emerge/QueueScheduler.py
index 0e39d6ad3..1379ffc6f 100644
--- a/pym/_emerge/QueueScheduler.py
+++ b/pym/_emerge/QueueScheduler.py
@@ -1,6 +1,8 @@
# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
+import time
+
from _emerge.PollScheduler import PollScheduler
class QueueScheduler(PollScheduler):
@@ -28,13 +30,36 @@ class QueueScheduler(PollScheduler):
def remove(self, q):
self._queues.remove(q)
- def run(self):
+ def clear(self):
+ for q in self._queues:
+ q.clear()
- while self._schedule():
- self._poll_loop()
+ def run(self, timeout=None):
- while self._running_job_count():
- self._poll_loop()
+ start_time = None
+ timed_out = False
+ remaining_timeout = timeout
+ if timeout is not None:
+ start_time = time.time()
+
+ while self._schedule():
+ self._schedule_wait(timeout=remaining_timeout)
+ if timeout is not None:
+ elapsed_time = time.time() - start_time
+ remaining_timeout = (timeout - 1000 * elapsed_time)
+ if remaining_timeout <= 0:
+ timed_out = True
+ break
+
+ if timeout is None or not timed_out:
+ while self._running_job_count():
+ self._schedule_wait(timeout=remaining_timeout)
+ if timeout is not None:
+ elapsed_time = time.time() - start_time
+ remaining_timeout = (timeout - 1000 * elapsed_time)
+ if remaining_timeout <= 0:
+ timed_out = True
+ break
def _schedule_tasks(self):
"""