# #信号量
# num = 0
# lock = threading.Lock() #加入进程锁
# semaphore = threading.BoundedSemaphore(5) #最多允许5个进程同时运行
# def run(n):
# semaphore.acquire()
# #lock.acquire() #获取锁
# global num
# num += 1
# time.sleep(1) #加入sleep就会变成串行,等待时间释放锁
# #lock.release() #释放锁
# semaphore.release()
# print num
#
# t_obj = []
#
# for i in range(50):
# t1 = threading.Thread(target=run, args=('x%s'%i,))
# t1.start()
# t_obj.append(t1)
# for i in t_obj:
# i.join()
#
# print 'now num is ',num
#事件,两个线程之间的交互
event = threading.Event()
def light():
count = 0
event.set()
while True:
if count >5 and count <10: #变红灯
event.clear() #清除标志位
print '\033[41;1mred lingt is on...\033[0m '
elif count>10:
event.set() #设置标志位 变绿灯
count = 0
print '\033[42;1mgreen lingt is on...\033[0m '
else:
print '\033[42;1mgreen lingt is on...\033[0m '
time.sleep(1)
count +=1
def car():
while True:
if event.is_set(): #代表是绿灯
print 'running'
else:
print 'waiting'
event.wait()
print 'begain run'
time.sleep(1)
# light = threading.Thread(target=light)
# car1 = threading.Thread(target=car)
# light.start()
# car1.start()
#队列 queue
作用:1、使程序解耦
2、提高处理效率
import Queue
# q = Queue.Queue() #先入先出
# #q = Queue.Queue(maxsize=3) 设置队列的最大值
# q.put('d1')
# q.put('d2')
# q.put('d3')
# print q.qsize()
# print q.get()
# print q.get()
# print q.get()
# #q.get() #如果队列里面没有内容会锁死
# #解决锁死的两种办法,put也可以加block和timeout参数或者使用q.get_nowait()
# q.get(block=False)
# q.get(timeout=1)
#
# q = Queue.LifoQueue() #后进先出
# q1 = Queue.PriorityQueue()#可以设置优先级
# q.put((10,'a')) #设置的方法(数字代表的是优先级,)优先级高的先出。
# q.put((6,'b'))
# q.put((-1,'v'))
# q.put((0,'d'))
#生产者消费者模型
q = Queue.Queue(maxsize=10)
def Producer():
count = 0
while True:
q.put('baozi%s'%count)
count +=1
print "生产了%s包子"%count
time.sleep(1)
def Consumer(name):
#while q.qsize()>0:
while True :
print '%s 取到包子%s'%(name,q.get())
p = threading.Thread(target=Producer)
c = threading.Thread(target=Consumer,args=('xiaoming',))
d = threading.Thread(target=Consumer,args=('xiaohong',))
p.start()
c.start()
d.start()