[python] multithreading & mutable sequence types

Marek Schmidt xschmi01 na stud.fit.vutbr.cz
Pondělí Říjen 25 11:02:52 CEST 2004


Dobrý den,

s Pythonem teprve začínám a tak ještě nejsem příliž zběhlý v hledání 
odpovědí na otázky... snažil jsem se... :-)

Jsou operace s pythonovským seznamem thread-safe?

Potřebuji udělat něco takového:

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 jiných threadů. Můj dotaz pochopitelně zní: 
Je bezpečné to udělat takto a nebo je nutné operace s queue uzavřít mezi 
lock.acquire a lock.release? (případně, nejde to vše udělat nějak úplně 
jinak a lépe? :-)

Díky za jakoukoliv odpověď.

Marek Schmidt



Další informace o konferenci Python