У Python есть аналогичный механизм управления Java CountDownLatch?
Итак, я начну с того, что это будет проблема домашней работы. Мой профессор дал нам задание, которое должно быть написано один раз на Java и один раз на другом языке; Я выбрал второй язык для Python, так как я, по крайней мере, немного знаком с ним. Программа должна работать следующим образом:
Запустите основной метод/поток, который мы будем называть parent.
запустить поток child 1 из родительского
начать нить внук из потока child 1
запустить поток child 2 из родительского
печать внука из потока внука
печатать дочерний элемент 2 из дочернего 2 потока
печатать дочерний элемент 1 из дочернего потока 1 поток
напечатать родителя из основного метода/родительского потока
Это должно быть сделано в этом порядке. Я написал код, который делает это на Java, используя CountDownLatch, чтобы организовать способ, которым это происходит. Однако я не видел подобного механизма в Python (хотя я менее знаком с Python, чем с Java). Есть ли аналогичный механизм, который, возможно, я просто не могу найти, потому что я не знаю, как он называется?
Ответы
Ответ 1
вы можете реализовать CountDownLatch, используя threading.Condition, как это:
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()
Ответ 2
Посмотрите классы Semaphore
или Condition
из модуля threading
.