-
Notifications
You must be signed in to change notification settings - Fork 4
/
queue.py
80 lines (67 loc) · 3 KB
/
queue.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# encoding: utf-8
"""
Modul für Scraper-Warteschlangen
Copyright (c) 2012 Marian Steinbach
Hiermit wird unentgeltlich jeder Person, die eine Kopie der Software und
der zugehörigen Dokumentationen (die "Software") erhält, die Erlaubnis
erteilt, sie uneingeschränkt zu benutzen, inklusive und ohne Ausnahme, dem
Recht, sie zu verwenden, kopieren, ändern, fusionieren, verlegen
verbreiten, unterlizenzieren und/oder zu verkaufen, und Personen, die diese
Software erhalten, diese Rechte zu geben, unter den folgenden Bedingungen:
Der obige Urheberrechtsvermerk und dieser Erlaubnisvermerk sind in allen
Kopien oder Teilkopien der Software beizulegen.
Die Software wird ohne jede ausdrückliche oder implizierte Garantie
bereitgestellt, einschließlich der Garantie zur Benutzung für den
vorgesehenen oder einen bestimmten Zweck sowie jeglicher Rechtsverletzung,
jedoch nicht darauf beschränkt. In keinem Fall sind die Autoren oder
Copyrightinhaber für jeglichen Schaden oder sonstige Ansprüche haftbar zu
machen, ob infolge der Erfüllung eines Vertrages, eines Delikts oder anders
im Zusammenhang mit der Software oder sonstiger Verwendung der Software
entstanden.
"""
class Queue(object):
"""Abstrakte Warteschlange, die zum Abarbeiten von Sitzungen,
Dokumenten etc. benutzt wird. Bereits verarbeitete Elemente
werden weiterhin gespeichert und können nicht erneut hinzugefügt
werden."""
def __init__(self):
self.fresh_elements = set()
self.used_elements = set()
def has_next(self):
"""Gibt True zurück, wenn Elemente in der Warteschlange sind."""
if len(self.fresh_elements) > 0:
return True
return False
def add(self, element):
"""Fügt ein Element zur Wartecshlange hinzu. Wenn das Element schon
in der Warteschlange ist, wird es nicht noch mal hinzugefügt, jedoch
kein Fehler erzeugt. Sollte das Element schon mal hinzugefügt und
bereits verarbeitet worden sein, wird ebenfalls kein Fehler erzeugt."""
if element not in self.used_elements:
self.fresh_elements.add(element)
def get(self):
"""Gibt das nächste Element aus der Warteschlange zurück und entfernt
es aus der Warteshlange. Wenn kein Element mehr vorhangen ist, wird
ein KeyError geworfen."""
el = self.fresh_elements.pop()
self.used_elements.add(el)
return el
def __len__(self):
"""Gibt die Anzahl der noch nicht bearbeiten Elemente zurück"""
return len(self.fresh_elements)
if __name__ == '__main__':
"""Tests"""
q = Queue()
print "Queue has elements:", q.has_next()
q.add(1)
print "Queue has elements:", q.has_next()
q.add(1)
q.add(2)
q.add(3)
print "Queue has num elements:", len(q)
print "Getting queue item:", q.get()
print "Queue has num elements:", len(q)
print "Getting queue item:", q.get()
print "Queue has num elements:", len(q)
print "Getting queue item:", q.get()
print "Queue has elements:", q.has_next()