Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r11275 - main/trunk/pym/_emerge
Date: Wed, 30 Jul 2008 03:07:45
Message-Id: E1KO22Q-0001yi-NC@stork.gentoo.org
1 Author: zmedico
2 Date: 2008-07-30 03:07:40 +0000 (Wed, 30 Jul 2008)
3 New Revision: 11275
4
5 Modified:
6 main/trunk/pym/_emerge/__init__.py
7 Log:
8 * Optimize SequentialTaskQueue.schedule() by using a _dirty attribute
9 to track whether anything relevant has changed since the last schedule
10 call. Since we can always rely on exist listeners being called, set of
11 running tasks is always pruned automatically and there is never any need
12 to actively prune it.
13 * Remove the unused SequentialTaskQueue.auto_schedule feature.
14
15
16 Modified: main/trunk/pym/_emerge/__init__.py
17 ===================================================================
18 --- main/trunk/pym/_emerge/__init__.py 2008-07-30 02:27:53 UTC (rev 11274)
19 +++ main/trunk/pym/_emerge/__init__.py 2008-07-30 03:07:40 UTC (rev 11275)
20 @@ -8112,8 +8112,8 @@
21
22 class SequentialTaskQueue(SlotObject):
23
24 - __slots__ = ("auto_schedule", "max_jobs", "running_tasks") + \
25 - ("_task_queue", "_scheduling")
26 + __slots__ = ("max_jobs", "running_tasks") + \
27 + ("_dirty", "_scheduling", "_task_queue")
28
29 def __init__(self, **kwargs):
30 SlotObject.__init__(self, **kwargs)
31 @@ -8121,19 +8121,21 @@
32 self.running_tasks = set()
33 if self.max_jobs is None:
34 self.max_jobs = 1
35 + self._dirty = True
36
37 def add(self, task):
38 self._task_queue.append(task)
39 - if self.auto_schedule:
40 - self.schedule()
41 + self._dirty = True
42
43 def addFront(self, task):
44 self._task_queue.appendleft(task)
45 - if self.auto_schedule:
46 - self.schedule()
47 + self._dirty = True
48
49 def schedule(self):
50
51 + if not self._dirty:
52 + return False
53 +
54 if not self:
55 return False
56
57 @@ -8149,10 +8151,6 @@
58 max_jobs = self.max_jobs
59 state_changed = False
60
61 - for task in list(running_tasks):
62 - if task.poll() is not None:
63 - state_changed = True
64 -
65 while task_queue and \
66 (max_jobs is True or len(running_tasks) < max_jobs):
67 task = task_queue.popleft()
68 @@ -8163,14 +8161,20 @@
69 task.start()
70 state_changed = True
71
72 + self._dirty = False
73 self._scheduling = False
74
75 return state_changed
76
77 def _task_exit(self, task):
78 - self.running_tasks.discard(task)
79 - if self.auto_schedule:
80 - self.schedule()
81 + """
82 + Since we can always rely on exist listeners being called, set of
83 + running tasks is always pruned automatically and there is never any need
84 + to actively prune it.
85 + """
86 + self.running_tasks.remove(task)
87 + if self._task_queue:
88 + self._dirty = True
89
90 def clear(self):
91 self._task_queue.clear()
92 @@ -8179,6 +8183,7 @@
93 task = running_tasks.pop()
94 task.removeExitListener(self._task_exit)
95 task.cancel()
96 + self._dirty = False
97
98 def __nonzero__(self):
99 return bool(self._task_queue or self.running_tasks)