2013-03-18 17 views
6

Mam klasy Pythona nazwijmy ją AClass i innym MyThread, który rozszerza wątku. I w tym AClassie tworzę 2 obiekty klasy MyThread i mam również semafor, który podaję jako parametr do konstruktora klasy MyThread. Moje pytanie brzmi, czy modyfikując semafor w jednym obiekcie MyThread, czy inny obiekt MyThread zobaczy różnicę? Przykład:Python threading and semaphore

class AClasss: 

    def function: 
      semafor = threading.Semaphore(value=maxconnections) 
      thread1 = Mythread(semafor) 
      thread2 = Mythread(semafor) 
      thread1.start() 
      thread1.join() 
      thread2.start() 
      thread2.join() 

class MyThread(Thread): 
    def __init__(self,semaphore): 
     self.semaphore = semaphore 
    def run(): 
     semaphore.acquire() 
     "Do something here" 
     semaphore.release() 

Czy wątek1 zawiera zmiany w semaforze, które ma wątek2 i odwrotnie?

Odpowiedz

7

To jest cel semaforów, pozwalają bezpiecznie synchronizować procesy współbieżne.

Należy pamiętać, że wątki w Pythonie naprawdę nie będą naprawdę uzyskać współbieżność, chyba że uwalniasz GIL (robi IO, wywoływanie bibliotek i tak dalej). Jeśli o to Ci chodzi, możesz rozważyć bibliotekę multiprocessing.

+1

Wielkie dzięki, choć to było tak, ale chciałem się upewnić przed wpatrzeniem w kodowanie. – exilonX