Package logilab-common-0 ::
Package 39 ::
Package 0 ::
Module tasksqueue
|
|
1 """Prioritized tasks queue
2
3 :organization: Logilab
4 :copyright: 2008 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
5 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
6 """
7 __docformat__ = "restructuredtext en"
8
9 from bisect import insort_left
10 from Queue import Queue
11
12 LOW = 0
13 MEDIUM = 10
14 HIGH = 100
15
16
18
19 - def _init(self, maxsize):
20 """Initialize the queue representation"""
21 self.maxsize = maxsize
22
23 self.queue = []
24
25 - def _put(self, item):
26 """Put a new item in the queue"""
27 for i, task in enumerate(self.queue):
28
29 if task == item:
30
31
32 if task < item:
33 item.merge(task)
34 del self.queue[i]
35 break
36
37 task.merge(item)
38 return
39 insort_left(self.queue, item)
40
42 """Get an item from the queue"""
43 return self.queue.pop()
44
46 return iter(self.queue)
47
49 """remove a specific task from the queue"""
50
51 for i, task in enumerate(self):
52 if task.id == tid:
53 self.queue.pop(i)
54 return
55 raise ValueError('not task of id %s in queue' % tid)
56
63
65 return '<Task %s @%#x>' % (self.id, id(self))
66
69
71 return self.id == other.id
72
75