2012-04-19 20 views
11

Vì vậy, tôi sẽ bắt đầu bằng cách nói rằng đây là vấn đề về bài tập về nhà. Giáo sư của tôi đã cho chúng tôi một bài tập phải được viết một lần bằng Java và một lần bằng ngôn ngữ khác; Tôi đã chọn ngôn ngữ thứ hai để được Python kể từ khi tôi ít nhất là một chút quen thuộc với nó. Chương trình phải hoạt động theo cách sau:Python có cơ chế điều khiển tương tự với CountDownLatch của Java không?

Bắt đầu phương thức/chủ đề chính mà chúng tôi sẽ gọi cho phụ huynh.

chủ đề bắt đầu con 1 từ cha mẹ

bắt đầu chủ đề cháu từ chủ đề con 1

chủ đề bắt đầu con 2 từ cha mẹ

in cháu từ thread cháu

in con 2 từ con 2 chủ đề

in con 1 từ con 1 chủ đề

in phụ huynh từ phương thức chính/chủ đề chính

Những việc này phải được thực hiện theo thứ tự này. Tôi đã viết mã thực hiện điều này trong Java bằng cách sử dụng CountDownLatch để tổ chức cách thức những điều này xảy ra. Tuy nhiên, tôi không thấy một cơ chế tương tự trong Python (mặc dù tôi không quen thuộc với Python hơn Java). Có một cơ chế tương tự mà có lẽ tôi không thể tìm thấy bởi vì tôi không biết nó được gọi là gì?

Trả lời

0

Nhìn vào các lớp Semaphore hoặc Condition từ mô-đun threading.

16

bạn có thể thực hiện CountDownLatch sử dụng threading.Condition như thế này:

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() 
Các vấn đề liên quan