У 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.