[python] multithreading & mutable sequence types

azurIt azurit na pobox.sk
Pondělí Říjen 25 12:48:37 CEST 2004


> DobrA'" den,

ahoj :)
nabuduce pls bez diakritiky, dost zle sa to lusti.

> 
> s Pythonem teprve zaA:*AnAAm a tak jeLAtA:* nejsem pL*AliLz zbA:*hlA'" v hledAAnA 
> odpovA:*dA na otAAzky... snaLzil jsem se... :-)
 
> Jsou operace s pythonovskA'"m seznamem thread-safe?

nje su

> 
> PotL*ebuji udA:*lat nA:*co takovASho:
> 
> 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)
> 
> 
> queueSayNi se bude volat z jinA'"ch threadLZ. MLZj dotaz pochopitelnA:* znA: 
> Je bezpeA:*nAS to udA:*lat takto a nebo je nutnAS operace s queue uzavL*At mezi 
> lock.acquire a lock.release? (pL*ApadnA:*, nejde to vLAe udA:*lat nA:*jak AsplnA:* 
> jinak a lASpe? :-)

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. este by bolo celkom vhodne dat volanje funkcie sayNiToTarget() do try: except: aby sa ti nestalo ze to tam vyhodi nejaku chybu a zamok/semafor ti ostane uzavrety. njeco taketo:

try:
 sayNiToTarget(target)
except:
 self.semafor.release()


> 
> DAky za jakoukoliv odpovA:*A:*.
> 
> Marek Schmidt
> 

azurIt
____________________________________
http://www.logofun.pobox.sk - urobte radost svojmu telefonu




Další informace o konferenci Python