folgendes Szenario:
ich habe einen Zeitraum über mehrere Tage (beispielsweise 1. Januar bis 31. Januar), den ich abarbeiten möchte. Um das etwas zu beschleunigen will ich da Threads einsetzen.
Ich habe mir jetzt gedacht, dass es eine gemeinsame Variable gibt, die den nächsten zu bearbeiteten Tag anzeigt, und jeder Thread "nimmt" sich praktisch einen Tag daraus und erhöht die Variable um einen Tag.
Tja, nur leider fängt jeder Thread bei dem ersten Tag an. Ich habe das bis jetzt so weit gelöst:
Code: Alles auswählen
class Blabla(threading.Thread):
lock = threading.Lock()
next_date = None
def __init__(self, end_date):
super(Blabla, self).__init__()
self.end_date = end_date
def run(self):
while True:
self.lock.acquire()
if self.next_date <= self.end_date:
current_date = self.next_date
self.next_date += timedelta(days=1)
else:
self.lock.release()
break
self.lock.release()
self.do_something()
Blabla.next_date = date(2015,1,1)
thread1 = Blabla(2015,1,31)
thread2 = Blabla(2015,1,31)
thread1.start()
thread2.start()
Kann mir jemand meinen Denkfehler sagen? Letztlich soll sich halt der schnellste Thread das erste Datum schnappen und es dann erhöhen, bevor es sich der nächste Thread schnappt.
Danke!