首页 > 编程语言 > 详细

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

时间:2019-09-18 22:20:09      阅读:113      评论:0      收藏:0      [点我收藏+]

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

一、队列

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

(1)
(1)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!