2013-03-18 13 views
6

Ho una classe python chiamiamola AClass e un'altra MyThread che estende Thread. E in quell'AClass faccio 2 oggetti della classe MyThread e ho anche un semaforo che gli ho dato come parametro per il costruttore della classe MyThread. La mia domanda è se modifico il semaforo in un oggetto MyThread l'altro oggetto MyThread vedrà la differenza? Es:Filettatura e semaforo Python

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() 

Così thread1 vede le modifiche al semaforo che fa thread2 e viceversa?

risposta

7

Questo è lo scopo dei semafori, che consentono di sincronizzare in modo sicuro i processi simultanei.

Ricordare che thread in Python non sarà in realtà ottenere la concorrenza a meno che non si sta rilasciando il GIL (facendo IO, chiamando le librerie e così via). Se è quello che stai cercando, potresti prendere in considerazione la libreria multiprocessing.

+1

grande grazie, pensavo fosse così ma volevo essere sicuro prima di iniziare a programmare. – exilonX