[Python-de] Re: Threading

Harald Armin Massa ghum at gmx.net
Mon Mar 31 13:36:24 EST 2003


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']*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





More information about the Python-de mailing list