python之多线程队列详解编程语言

# 一共有以下3种队列
# 1、先进先出
# 2、后进先出
# 3、存储数据的时候可设置优先级的队列,设置不同的优先级,取的时候按照优先级的顺序来取

下面介绍一下队列的方法,如果要使用队列,则需要导入一个模块queue
import queue 
 
 
q = queue.Queue(maxsize=3) 
#创建一个队列的实例,该是对象的size是3 
 
# q.get() 
#从队列中获取值,如果队列中没有值,则会一直阻塞 
 
 
# q.qsize() 
#获取队列的size 
 
 
# q.get(timeout=3) 
#c从队列中获取值,如果获取不到值,则只等待3s,如果超过3则会报错 
# queue.Empty 
 
# q.get_nowait()的方法和q.get(timeout=3)一样的,如果拿不到会数据也会报一个queue.Empty的错 
# queue.Empty 
 
 
#可以传一个list到队列中,取出来的也是一个list 
q.put(["a","b","c"]) 
data = q.get_nowait() 
print(data,type(data)) 
 
# ['a', 'b', 'c'] <class 'list'> 
 
 
#我们也可以把一个实例放在队列中 
class foo(object): 
    def __init__(self,n): 
        self.n = n 
 
 
f = foo(2) 
 
q.put(f) 
c = q.get_nowait() 
print(c,type(c)) 
 
# <__main__.foo object at 0x01D03CB0> <class '__main__.foo'> 
 
 
#判断队列是否满,队列中有3个数据,如果get了一个,则队列中的数据个数就为2了 
print(q.full()) 
# False 
print(q.qsize()) 
q.put("1") 
q.put({"k1":"v1"}) 
q.put(["a","b","c"]) 
print(q.qsize()) 
 
 
# q.put("2222") 
#如果队列满了,则put会一直put不进去,这里就会一直阻塞 
 
 
# q.put("abc",timeout=2) 
#如果队列满了,加一个timeout=2.则会等待2s,如果还放不进去则会报错“queue.Full” 
 
# q.task_done() 
# q.join() 
 
 
# q.empty() 
# 判断队列是否为空 
 
 
q = queue.Queue() 
#上面这个是创建一个先进先出的队列 
 
 
q = queue.LifoQueue() 
#这里是创建一个先进后出的队列 
 
 
 
q= queue.PriorityQueue() 
#创建一个可以设置优先级的队列,存数据的时候是要用tuple的个数传数据,优先级越小,就越会被提前取出来 
 
q.put((1,["a","b","c"])) 
q.put((2,"abc")) 
 
 
print(q.get()) 
 
# (1, ['a', 'b', 'c']) 

  

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/20875.html

(0)
上一篇 2021年7月19日 23:51
下一篇 2021年7月19日 23:51

相关推荐

发表回复

登录后才能评论