
Matthias,
1.) die Liste der URLs in eine Queue stellen
Queue hat gegenüber "kleine_Array+Semaphoren" den Nachteil dass sie umne Größenordnung lahmer ist (war jedenfalls so das letzte Mal als ich das getestet habe).
Mag sein. Aber das Bottleneck dürften das Herunterladen sein, nicht die Queue. Und Queue ist richtig gut ausgetestet in Sachen Thread-Sicherheit - BDFL-zertifiziert, sozusagen.
import Queue urlq=Queue.Queue()
Hier kann man praktischerweise eine maxsize definieren.
Richtig ... aber damit wird das ganze unnötig unflexibler und langsamer (letzteres ist überraschend, was? sieh selbst:
from timeit import * a=Timer(stmt="lq=Queue.Queue()\nfor i in liste:\n
lq.put(i)\n",setup="import Queue\nliste=['http://www.supergeileleberwurst.de%27%5D*4000')
b=Timer(stmt="lq=Queue.Queue(maxsize=4000)\nfor i in liste:\n
lq.put(i)\n",setup="import >>>a.timeit(1000) 121.94487764649483
b.timeit(1000)
128.74283889632929 ----- dann doch eher das umformulieren:
for element in urlListe: urlq.put(element)
nix=map(urlq.put, urlListe)
Wie gesagt -- die ganze Liste füllen und dann erst die Threads starten ist spätestens bei vielen URLs oder nichttrivialer URL-Generierung kontraproduktiv. (Die urlliste ist bei mir im Übrigen grundsätzlich ein Iterator. ;-)
Völlig korrekt... da lohnt es sich dann, einen Thread zum Queue-auffüllen zu starten, und die Queue ohne "nowait" zu betreiben. Oder auch 2 Threads zum Queue auffüllen.
Kannst sogar die Queue nach und nach befüllen, solange sie nicht leer ist, laufen die Threads weiter.
Das würde ich nicht tun... solche Programmier-Abkürzungen tendieren dazu, früher oder später gewaltig in die Hose zu gehen.
Da hast Du völlig recht. Das war nur ein "added Bonus" *G*
Lieber Gruß
Harald
_______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de