线程的队列,条件,定时器

mac2022-06-30  103

线程的队列,条件,定时器

一、队列

queue队列 :使用import queue,用法与进程Queue一样

队列中封装了很多的锁,所以对于线程,队列绝对安全

普通队列(先进先出)

q = queue.Queue() q.put() q.get() q.put_nowait() q.get_nowait()

栈(先进后出,后进先出)

q = queue.LifoQueue() q.put(1) q.put(2) q.put(3) print(q.get()) print(q.get()) ''' 3 2 '''

优先级队列

q = queue.PriorityQueue() q.put((1,'a')) q.put((15,'b')) q.put((10,'c')) q.put((3,'d')) q.put((1,'f')) print(q.get()) print(q.get()) print(q.get()) ''' (1, 'a') (1, 'f') (3, 'd') 参数已元组形式存放 第一个是优先级 数字越小,优先级越高 优先级相同,按ascii码比较 第二个是加入队列的内容 '''

二、条件

条件也是锁也有acquire和release一个条件被创建,默认有一个False状态False状态会影响wait一直处于等待状态notify(int数据类型) 指定造钥匙的数量notify和wait必须在acquire和release之间 from threading import Thread,Condition con = Condition() def func(con,i): con.acquire() con.wait() # 等钥匙 阻塞 print(f'我在第{i}个线程里') con.release() # 创建线程 s = 10 for i in range(s): Thread(target=func,args=(con,i)).start() # 循环造钥匙,超过线程总数便停止 while True: num = int(input('>>>>>>>')) import time con.acquire() con.notify(num) # 造钥匙 con.release() time.sleep(0.5) ''' >>>>>>>3 我在第1个线程里 我在第0个线程里 我在第2个线程里 >>>>>>>4 我在第6个线程里 我在第4个线程里 我在第5个线程里 我在第3个线程里 >>>>>>>5 我在第9个线程里 我在第8个线程里 我在第7个线程里 >>>>>>>2 >>>>>>> '''

三、定时器

给线程的开启加了定时器,限定线程在指定时间后开启

from threading import Timer import datetime import time def func(): print(datetime.datetime.now()) while True: Timer(2,func).start() # 让创建的线程间隔一段时间才执行 print('休息中......') time.sleep(2) ''' 休息中...... 2019-09-18 20:55:25.158692 休息中...... 2019-09-18 20:55:27.158931 休息中...... 2019-09-18 20:55:29.159125 休息中...... '''

转载于:https://www.cnblogs.com/dadazunzhe/p/11545533.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)