[Python-de] threads - noch mehr Fragen

Gerhard Häring haering_python at gmx.de
Sun Apr 28 11:08:29 EDT 2002


* Stefan Schwarzer <s.schwarzer at ndh.net> [2002-04-28 02:31 +0200]:
> Hallo,
> 
> ich habe auch gerade angefangen, mich intensiver mit Multithreading in
> Python auseinanderzusetzen und habe auch ein paar Fragen.
> [...]
> 2. Ich habe mir die Doku zum Modul threading durchgelesen, aber habe
> noch kein so rechtes Gefühl dafür, für welchen Zweck ich welche Klasse
> (Lock, RLock, Semaphore, Condition, Event) verwende. Irgendwie sind mir
> die Beschreibungen im Moment zu abstrakt, obwohl ich sonst mit
> abstrakten Beschreibungen ganz gut zurechtkomme.
> 
> Kann mir jemand Tipps geben, was ich lesen/anschauen kann, um mit den
> Konzepten vertrauter zu werden? Meine Suche mit Google (Web und Groups)
> war nicht so ergiebig.

Ich habe gehört, dass es von Aahz ein Tutorial geben soll. Was ich da
gesehen habe, ist aber mehr als mager. Evtl. ist das in einem Buch ganz
gut beschrieben. Als ich das letzte Mal im Laden Python-Bücher gewälzt
habe, hatten mir die von Lundh und Beazley echt gut gefallen. Vielleicht
steht ja bei Amazon o. ä. ein Inhaltsverzeichnis.

> 3. Ein konkretes Beispiel, mit dem ich mich gerade auseinandersetze,
> ist dieses: Ich habe einen Teil Initialisierungscode, der nur einmal
> ausgeführt werden soll, genauer, vom ersten Thread, der den Code erreicht.
> 
> Im Moment ist das etwa so implementiert, wobei eine Instanz der Klasse
> Example von mehreren Threads verwendet werden kann.
> 
> class Example:
>     def __init__(self):
>         self._is_worked_on_or_ready = False
>         self._is_ready = False
>         self._data = ...
> 
>     def _init_structure(self):
>         if self._is_worked_on_or_ready:
>             return
>         else:
>             self._is_worked_on_or_ready = True
>         # init self._data
>         ...
>         self._is_ready = True
> 
>     def use_structure(self, id):
>         # this code might be called concurrently
>         while not self._is_ready:
>             self._init_structure()

:-)) Genau darum wurden die Konstruktionen, wie man sie in threading
sieht, erfunden. Deine while-Schleife verbrät absolut unnötig
Rechenzeit. Abgesehen davon kann es leicht sein, dass der Code deswegen
auch noch Bugs enthält. Das kann ich aber nicht beurteilen.

Schau dir mal threading.Condition an, das scheint hier genau das
richtige zu sein.

>         # do something with self._data
>         ...
>         return ...
> [...]

Gerhard
-- 
This sig powered by Python!
Außentemperatur in München: 11.6 °C      Wind: 3.1 m/s



More information about the Python-de mailing list