2012-04-19 10 views
11

Zacznę od stwierdzenia, że ​​jest to problem dotyczący pracy domowej. Mój profesor dał nam zadanie, które musi być napisane raz w Javie i raz w innym języku; Wybrałem drugi język jako Python, ponieważ jestem przynajmniej trochę obeznany z nim. Program musi działać w następujący sposób:Czy Python ma podobny mechanizm kontroli do CountDownLatch Java?

Uruchomić główną metodę/wątek, który nazwiemy rodzicem.

gwint początkowy dziecko 1 od rodzica gwint

początek wnuka z nici dziecka 1

gwint początkowy dziecko 2 od rodzica

druku wnuczek z gwintem wnuka

druku podrzędnej 2 od dziecka 2 wątek

wydrukować dziecko 1 od dziecka 1 nitka

drukuj rodzica z głównej metody/wątku rodzica

Te rzeczy muszą być wykonane w tej kolejności. Napisałem kod, który robi to w Javie przy użyciu CountDownLatch w celu uporządkowania sposobu, w jaki te rzeczy się pojawiają. Jednak nie widziałem podobnego mechanizmu w Pythonie (chociaż ja jestem mniej zaznajomiony z Pythonem niż z Javą). Czy istnieje podobny mechanizm, którego może nie mogę znaleźć, ponieważ nie wiem, jak się nazywa?

Odpowiedz

0

Sprawdź klasy Semaphore lub Condition z modułu threading.

16

można zaimplementować CountDownLatch użyciu threading.Condition tak:

import threading 

class CountDownLatch(object): 
    def __init__(self, count=1): 
     self.count = count 
     self.lock = threading.Condition() 

    def count_down(self): 
     self.lock.acquire() 
     self.count -= 1 
     if self.count <= 0: 
      self.lock.notifyAll() 
     self.lock.release() 

    def await(self): 
     self.lock.acquire() 
     while self.count > 0: 
      self.lock.wait() 
     self.lock.release() 
Powiązane problemy