标签:
import threading lock = threading.RLock()#定义一个线程锁 def worker(num): print("Thread %d" % num) for i in range(20): t = threading.Thread(target=worker,args=(i,),name="t.%d" % i) t.start()#激活线程 执行结果: Thread 0 Thread 1 Thread 2 Thread 6 Thread 4 Thread 3 Thread 5 Thread 8 Thread 10 Thread 9 Thread 7 Thread 13 Thread 12 Thread 11 Thread 16 Thread 14 Thread 15 Thread 19 Thread 18 Thread 17
import threading lock = threading.RLock()#定义一个线程锁 def worker(num): lock.acquire()#加锁 print("Thread %d" % num) lock.release()#解锁 for i in range(20): t = threading.Thread(target=worker,args=(i,),name="t.%d" % i) t.start()#激活线程 执行结果: Thread 0 Thread 1 Thread 2 Thread 3 Thread 4 Thread 5 Thread 6 Thread 7 Thread 8 Thread 9 Thread 10 Thread 11 Thread 12 Thread 13 Thread 14 Thread 15 Thread 16 Thread 17 Thread 18 Thread 19
lock = threading.Lock()#定义一个线程锁 lock.acquire()#加锁 print(123) lock.acquire()#加锁 产生了死锁 print(234) lock.release()#解锁 print(345) lock.release()#解锁 #死锁,自己加锁后再次申请锁自己等待自己释放锁。 执行结果: 123 一直等待~~~~~~~~~~
lock = threading.RLock()#定义一个线程锁 lock.acquire()#加锁 print(123) lock.acquire()#加锁 print(234) lock.release()#解锁 print(345) lock.release()#解锁 #他不会产生死锁,但是需要注意产生了多少锁需要释放多少锁 执行结果: 123 234 345
import threading def do(event): print(‘start‘) event.wait() print(‘execute‘) event_obj = threading.Event() for i in range(10): t = threading.Thread(target=do, args=(event_obj,)) t.start() event_obj.clear() inp = input(‘input:‘) if inp == ‘true‘: event_obj.set() 执行结果: start start start start start input:true execute execute execute execute execute
这个模型也叫生产者-消费者模型。)
import queue q = queue.Queue(maxsize=0) # 构造一个先进显出队列,maxsize指定队列长度,为0 时,表示队列长度无限制。 q.join() # 等到队列为kong的时候,在执行别的操作 q.qsize() # 返回队列的大小 (不可靠) q.empty() # 当队列为空的时候,返回True 否则返回False (不可靠) q.full() # 当队列满的时候,返回True,否则返回False (不可靠) q.put(item, block=True, timeout=None) # 将item放入Queue尾部,item必须存在,可以参数block默认为True,表示当队列满时,会等待队列给出可用位置, 为False时为非阻塞,此时如果队列已满,会引发queue.Full 异常。 可选参数timeout,表示 会阻塞设置的时间,过后, 如果队列无法给出放入item的位置,则引发 queue.Full 异常 q.get(block=True, timeout=None) # 移除并返回队列头部的一个值,可选参数block默认为True,表示获取值的时候,如果队列为空,则阻塞,为False时,不阻塞, 若此时队列为空,则引发 queue.Empty异常。 可选参数timeout,表示会阻塞设置的时候,过后,如果队列为空,则引发Empty异常。 q.put_nowait(item) # 等效于 put(item,block=False) q.get_nowait() # 等效于 get(item,block=False)
import threading,queue message = queue.Queue(10) def producer(i): print(‘>>>>>‘,i) message.put(i) def consumer(i): msg = message.get() print(‘date‘,msg) for i in range(12): t = threading.Thread(target=producer, args=(i,)) t.start() for i in range(10): t = threading.Thread(target=consumer, args=(i,)) t.start() 执行结果: >>>>> 0 >>>>> 1 >>>>> 2 >>>>> 3 >>>>> 4 >>>>> 5 >>>>> 6 >>>>> 7 >>>>> 8 >>>>> 9 >>>>> 10 >>>>> 11 date 0 date 1 date 2 date 3 date 4 date 5 date 6 date 7 date 8 date 9
标签:
原文地址:http://www.cnblogs.com/WuYongQi/p/5597344.html