17

所以,我首先要说这是一个家庭作业问题。我的教授给了我们一个作业,必须用 Java 写一次,然后用另一种语言写一次;我选择第二种语言是 Python,因为我至少对它有点熟悉。该程序必须以下列方式工作:

start the main method/thread, which we will call parent
start thread child 1 from the parent
start thread grandchild from thread child 1
start thread child 2 from the parent
print grandchild from the grandchild thread
print child 2 from the child 2 thread
print child 1 from the child 1 thread
print parent from the main method/parent thread

这些事情必须按照这个顺序完成。我使用 CountDownLatch 在 Java 中编写了执行此操作的代码,以便组织这些事情发生的方式。但是,我没有在 Python 中看到类似的机制(尽管我对 Python 的熟悉程度不如 Java)。是否有类似的机制可能我只是找不到,因为我不知道它叫什么?

4

3 回答 3

23

您可以使用 threading.Condition 实现 CountDownLatch,如下所示:

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()
于 2014-07-17T06:58:44.017 回答
0

查看模块中的SemaphoreorConditionthreading

于 2012-04-19T21:37:05.000 回答
0

Python 3.2 添加了一个BarrierCountDownLatch. 主要区别在于它可以重置,并且没有等待的倒计时方法。

https://docs.python.org/3/library/threading.html#barrier-objects

于 2021-04-21T19:40:41.627 回答