hab gerade diese Klasse implemetiert und mich würde interessieren ob das Teil 100% threading sicher ist? Kenn mich nicht ganz genau mit threading.Condition aus, aber so müsste es funktionieren, oder?
Code: Alles auswählen
import threading
class Queue(object):
def __init__(self):
self.queue = {}
self.ergebnis = {}
self.mutex = threading.Lock()
self.not_empty = threading.Condition(self.mutex)
self.not_full = threading.Condition(self.mutex)
th = threading.Thread(target=self.worker)
th.setDaemon(True)
th.start()
def put(self, function, args):
self.not_full.acquire()
for x in xrange(10000):
if x not in self.queue.keys():
id = x
break
self.queue[id] = (function, args)
self.not_empty.notify()
self.not_full.wait()
erg = self.ergebnis[id]
del self.ergebnis[id]
self.not_full.release()
return erg
def worker(self):
while True:
self.not_empty.acquire()
self.not_empty.wait()
key = self.queue.keys()[0]
item = self.queue[key]
del self.queue[key]
erg = item[0](*item[1])
self.ergebnis[key] = erg
self.not_full.notify()
self.not_empty.release()