def get_wait_time(): return random.random()/5.0 # 资源数0 S = threading.Semaphore(0) def consumer(name): S.acquire() time.sleep(get_wait_time()) print name def producer(name): # time.sleep(0.1) time.sleep(get_wait_time()) print name S.release() if __name__ == "__main__": for i in xrange(5, 10): c = threading.Thread(target=consumer, args=("consumer:%s"%i, )) c.start() for i in xrange(5): p = threading.Thread(target=producer, args=("producer:%s"%i, )) p.start() time.sleep(2)
下面是一种可能的执行结果:
producer:3 producer:0 consumer:6 producer:4 producer:1 consumer:5 producer:2 consumer:7 consumer:8 consumer:9
View Code条件Condition
接下来看一下另一种同步机制条件Condition,该同步条件不是很直观,为了更好的查看其工作过程,先定义一些函数: