[python] multithreading & mutable sequence types

Marek Schmidt xschmi01 na stud.fit.vutbr.cz
Pondělí Říjen 25 14:06:27 CEST 2004


>>
>>class KnightWhoSayNi(threading.Thread):
>>   def __init__(self):
>>     ...
>>     self.semafor = threading.Semaphore(0)
>>     self.queue = []
>>
>>   def queueSayNi(self, target):
>>     self.queue.append(target)
>>     self.semafor.release()
>>
>>   def run(self):
>>     while True:
>>        self.semafor.acquire()
>>        target = self.queue.pop(0)
>>
>>        sayNiToTarget(target)
>>
>>
> 
> nje som sice expert na thready a ani nevjem naco presne sluzi semafor (z dokumentacie sa mi zdalo ze je to nato aby sa dal obmedzit pocet procesov, ktore mozu naraz k njecomu pristupovat, ak som to pochopil zle tak ma prosim njekto opravte :) )
> ja osobne som semafori este nepouzil :) pouzivam Lock() a RLock() ale myslim ze ked pouzijes Semaphore(0) tak to je vlastne to iste cize ked chces aby tam pristupoval naraz len jeden proces bolo by asi lepsje pouzit tje zamky.



Ne tak docela. Je to problem typu Producent - Konzument. Potrebuji, 
abych mohl do fronty pridat libovolny pocet pozadavku, aniz by se 
zpracovali a nezavisle na tom bude spusten thread, ktery pak bude tyto 
pozadavky jeden po druhem zpracovavat...

napr:

knight = KnightWhoSayNi()

knight.queueSayNi(target="King Arthur")
knight.queueSayNi(target="Sir Lancelot")
knight.queueSayNi(target="Sir Robin")

knight.start()

...

Proto potrebuji pouziv semafor.



Další informace o konferenci Python