1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 """Prioritized tasks queue"""
19
20 __docformat__ = "restructuredtext en"
21
22 from bisect import insort_left
23 from queue import Queue
24
25 LOW = 0
26 MEDIUM = 10
27 HIGH = 100
28
29 PRIORITY = {
30 'LOW': LOW,
31 'MEDIUM': MEDIUM,
32 'HIGH': HIGH,
33 }
34 REVERSE_PRIORITY = dict((values, key) for key, values in PRIORITY.items())
35
36
37
39
40 - def _init(self, maxsize):
41 """Initialize the queue representation"""
42 self.maxsize = maxsize
43
44 self.queue = []
45
46 - def _put(self, item):
47 """Put a new item in the queue"""
48 for i, task in enumerate(self.queue):
49
50 if task == item:
51
52
53 if task < item:
54 item.merge(task)
55 del self.queue[i]
56 break
57
58 task.merge(item)
59 return
60 insort_left(self.queue, item)
61
63 """Get an item from the queue"""
64 return self.queue.pop()
65
67 return iter(self.queue)
68
70 """remove a specific task from the queue"""
71
72 for i, task in enumerate(self):
73 if task.id == tid:
74 self.queue.pop(i)
75 return
76 raise ValueError('not task of id %s in queue' % tid)
77
84
86 return '<Task %s @%#x>' % (self.id, id(self))
87
90
93
95 return self.id == other.id
96
97 __hash__ = object.__hash__
98
101