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
24 from six.moves import queue
25
26 LOW = 0
27 MEDIUM = 10
28 HIGH = 100
29
30 PRIORITY = {
31 'LOW': LOW,
32 'MEDIUM': MEDIUM,
33 'HIGH': HIGH,
34 }
35 REVERSE_PRIORITY = dict((values, key) for key, values in PRIORITY.items())
36
37
38
40
41 - def _init(self, maxsize):
42 """Initialize the queue representation"""
43 self.maxsize = maxsize
44
45 self.queue = []
46
47 - def _put(self, item):
48 """Put a new item in the queue"""
49 for i, task in enumerate(self.queue):
50
51 if task == item:
52
53
54 if task < item:
55 item.merge(task)
56 del self.queue[i]
57 break
58
59 task.merge(item)
60 return
61 insort_left(self.queue, item)
62
64 """Get an item from the queue"""
65 return self.queue.pop()
66
68 return iter(self.queue)
69
71 """remove a specific task from the queue"""
72
73 for i, task in enumerate(self):
74 if task.id == tid:
75 self.queue.pop(i)
76 return
77 raise ValueError('not task of id %s in queue' % tid)
78
85
87 return '<Task %s @%#x>' % (self.id, id(self))
88
91
94
96 return self.id == other.id
97
98 __hash__ = object.__hash__
99
102