2012-04-19 53 views
11

所以,我会首先说这是一个家庭作业问题。我的教授给了我们一项任务,必须用Java写一次,用另一种语言写一次;我选择第二种语言是Python,因为我至少有一点熟悉它。该程序必须按以下方式工作:Python是否具有与Java的CountDownLatch类似的控制机制?

启动我们将调用父级的主方法/线程。

启动线程的孩子1从父

启动线程孙子从线程孩子1

启动线程的孩子2从父从孙子线程

打印孩子2

打印孙子从孩子2线程

打印孩子1从孩子1线程

从主要方法/父线程的父母打印

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

回答

0

查看threading模块中的SemaphoreCondition类。

16

您可以使用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() 
相关问题