python使用condition实现一个简易的栅栏,CyclicBarriar

来源:互联网 发布:c 凯撒密码编程 编辑:程序博客网 时间:2024/05/15 00:51
'''Created on 2017-1-11@author: admin'''from threading import  Condition, Threadclass CyclicBarriar():    def __init__(self,job,count):        self.condition=Condition()        self.job=job;        self.count=count    def await(self):        self._doAwait()    def _doAwait(self):        try:            self.condition.acquire()            self.count-=1            if self.count==0:                if self.job!=None:                    self.job.run()                self.condition.notifyAll()            else:                self.condition.wait()            finally:            self.condition.release()    if __name__ == '__main__':    class SubThread(Thread):        def __init__(self,name,barriar):            Thread.__init__(self)            self.name=name;            self.barriar=barriar        def run(self):            print("finishing %s"%self.name)            self.barriar.await()    class MainThread(Thread):        def __init__(self):            Thread.__init__(self)        def run(self):            print("finishing main thread")        barrair=CyclicBarriar(MainThread(),3)    thread1=SubThread("thread one",barrair)    thread2=SubThread("thread second",barrair)    thread3=SubThread("thread third",barrair)    thread1.start()    thread2.start()    thread3.start()    

0 0
原创粉丝点击