Python是否具有与Java的CountDownLatch类似的控制机制?

时间:2012-04-19 21:19:54

标签: python multithreading

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

启动我们称之为父的主方法/线程。

从父母

开始线程子1

从线程子1启动线程孙子

从父母

开始线程子2

从孙子线程中打印孙子

从子2线程打印子2

从子1线程打印子1

从main方法/父线程

打印父项

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

3 个答案:

答案 0 :(得分:18)

您可以使用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()

答案 1 :(得分:0)

查看Semaphore模块中的Conditionthreading类。

答案 2 :(得分:0)

Python 3.2 添加了一个 Barrier 类,该类具有一些与 CountDownLatch 重叠的功能。主要区别是可以重置,没有不等待的倒计时方法。

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