121 python程序中的线程操做-队列queue

1、线程队列

queue队列:使用方法同进程的Queue同样python

若是必须在多个线程之间安全地交换信息时,队列在线程编程中尤为有用。编程

重要:安全

q.put():往队列里面放值,当参数block=Ture的时候,timeout参数将会有做用,当队列已经满了的时候,在往里面放值时,block为True程序将会等待timeout的时间,过了时间程序会报错,block若是为Flase时,程序不会等待直接报错线程

q.get():从队列里面取值,当参数block=Ture的时候,timeout参数将会有做用,当队列已经空了的时候,在从里面取值时,block为True程序将会等待timeout的时间,过了时间程序会报错,block若是为Flase时,程序不会等待直接报错code

q.task_done():使用者使用此方法发出信号,表示q.get()返回的项目已经被处理。若是调用此方法的次数大于从队列中删除的项目数量,将引起ValueError异常。对象

q.join():生产者将使用此方法进行阻塞,直到队列中全部项目均被处理。阻塞将持续到为队列中的每一个项目均调用q.task_done()方法为止。队列

2、线程队列的取值方式

2.1 先进先出

class queue.Queue(maxsize=0)进程

q = queue.Queue():不加参数表明队列能够无限的放数据ci

q = queue.Queue() #不加参数表明队列能够无限的放数据
q.put('Cecilia陈')
q.put('xichen')

print(q.get())
print(q.get())

'''
结果:
Cecilia陈
xichen
'''

2.2 后进先出

class queue.LifoQueue(maxsize=0)get

q = Lifo.Queue():不加参数表明队列能够无限的放数据

q = queue.LifoQueue() #不加参数表明队列能够无线的放数据
q.put('Cecilia陈')
q.put('xichen')

print(q.get())
print(q.get())
'''
结果:
xichen
Cecilia陈
'''

3、队列存数据时能够设置优先级

class queue.priorityQueue(maxsize=0)

q = queue.priorityQueue():不加参数表明队列能够无限的放数据

3.1 优先级队列

# 3.优先级队列
q = queue.PriorityQueue() #不加参数表明队列能够无线的放数据
#put进入一个元组,元组的第一个元素是优先级(一般是数字,也能够是非数字之间的比较),数字越小优先级越高
q.put((2,'Cecilia陈'))
q.put((1,'xichen'))
q.put((5,'xuchen'))

print(q.get())
print(q.get())
print(q.get())
'''
# 结果(数字越小优先级越高,优先级高的优先出队):
结果:
(1, 'xichen')
(2, 'Cecilia陈')
(5, 'xuchen')
'''

3.2 方法说明

maxsize是一个整数,它设置能够放置在队列中的项数的上限。一旦达到此大小,插入将阻塞,直到使用队列项。若是maxsize小于或等于零,则队列大小为无穷大。

p.put():放值的时候,放的是一个元组()

exception queue.Empty:异常队列。空:当对空的队列对象调用非阻塞 get() 或 get_nowait() 时引起异常,也就是说队列为空的时候,再取值就会报错

exception queue.Full:异常队列。Full:当对已满的队列对象调用非阻塞put() 或 put_nowait() 时引起异常。也就是说当队列已满的时候,再往里面当值的时候将会报错

Queue.qsize ():

empty():若是为空,返回True

Queue.full():若是已满,返回True

put_nowait(item):等同于put(item, False)。

get_nowait():等同于get(False)。

提供了两种方法来支持跟踪已加入队列的任务是否已被守护进程使用者线程彻底处理:

task_done():表示之前加入队列的任务已经完成。由队列使用者线程使用。对于用于获取任务的每一个get(),后续对task_done()的调用告诉队列任务上的处理已经完成。若是join(当前处于阻塞状态,那么在处理完全部项以后,它将继续运行(这意味着对于已经放入队列()的每一个项,都收到了task_done()调用)。

若是调用次数超过放置在队列中的项的次数,则引起ValueError。

Queue.join():块直到队列被消费完毕。

相关文章
相关标签/搜索