Hi,
Falls die URLs indexiert sind, gib jedem Thread einen Offset aus dem Intervall [0..9] mit. Jeder Thread kann dann die URLs (n*10) + offset übertragen wobei n von 0 bis unendlich geht. Der Thread ist fertig, wenn eine URL mit dem entsprechenden Index nicht existiert.
Problem: Wenn zufällig die URLs 1,31,51 und 1171 blockieren, dann braucht einer der Threads zehnmalsolang wie alle anderen. Besser: Nimm einfach eine Liste. Produzent: Starte XThreads generiere URLs und pushe sie auf die Liste Pushe X mal "Stirb!" auf die Liste warte auf alle Threads Thread: while 1: try: pop(0) von der Liste except IndexError: warte_ein_weilchen; continue wenn "Stirb!": stirb # :-) bearbeite Element Ist doch extrem einfach, oder? Für den Ernstfall (d.h. es sind nicht 4000 sondern 4 Millionen Elemente, die du zB aus einer Datenbank liest) wird es etwas mehr Aufwand, da muss der Produzent ein Weilchen warten wenn die Liste zu lang wird, sonst hast du ein Hauptspeicherproblem. Bonuspunkte: Mache das Warten mit Semaphoren, nicht mit sleep(). -- Matthias Urlichs | noris network AG | http://smurf.noris.de/ -- Man genießt und fühlt den Reichtum nur in der Minute, wo man ihn unverhofft bekommt; darauf wird er zu Armut. -- Jean Paul