[Python-de] Threading

Matthias Urlichs smurf at noris.de
Mon Mar 31 09:52:56 EST 2003


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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: signature
Url : http://starship.python.net/pipermail/python-de/attachments/20030331/7c721992/attachment.bin


More information about the Python-de mailing list