python queue模块安装_Python模块-queue队列模块

队列方法

q = queue.Queue().put()

队列方法

释义

q.put()

存数据

q.get()

获取队列

q.qsize()

队列大小

q.empty()

判断队列是否为空,为空返回True

q.full()

判断队列是否已满,已满返回True

q.put_nowait()

相当于q.put(block=Flase)

q.get_nowait()

相当于q.get(block=Flase)

q.task_done()

在完成一项工作后,q.task_done向任务已完成队列发送信号

q.join()

等待队列,接收q.task_done发送的信号

队列优先级

queue.Queue()

先进先出

# -*- coding:utf-8 -*-

import queue

q = queue.Queue(3) #创建一个空队列 【先进先出】

q.put(1) #往队列中添加值

q.put(2)

q.put(3)

while 1:

data = q.get()

print(data)

1

2

3

queue.LifoQueue()

先进后出

# -*- coding:utf-8 -*-

import queue

q = queue.LifoQueue(3) #创建一个空队列 【先进后出】

q.put(1) #往队列中添加值

q.put(2)

q.put(3)

while 1:

data = q.get()

print(data)

321

queue.PriorityQueue()

定级队列

# -*- coding:utf-8 -*-

import queue

q = queue.PriorityQueue(3) #创建一个空队列 【定级队列】

q.put([2,"hello"]) #往队列中添加值

q.put([1,"你好"])

q.put([3,"hi"])

while 1:

data = q.get()

print(data[1])

你好

hello

hi

多线程队列

# -*- coding:utf-8 -*-

from threading import Thread

import queue

def f(q,n):

q.put(n * n + 1) #存数据到队列中

print("队列新增数据内存地址:",id(q)) #打印对象内存地址

if __name__ == "__main__":

q = queue.Queue() #实例化线程队列

print("队列内存地址:",id(q)) #打印对象内存地址

for i in range(3): #for循环调用

p = Thread(target=f,args=(q,i)) #建立线程,值通过args传值

p.start() #启用线程

print(q.get()) #拿队列中的值

print(q.get())

print(q.get())

队列内存地址: 2641998861088

队列新增数据内存地址: 2641998861088

队列新增数据内存地址: 2641998861088

队列新增数据内存地址: 2641998861088

1

2

5

多进程队列

# -*- coding:utf-8 -*-

from multiprocessing import Process,Queue

def f(q,n):

q.put(n * n + 1) #存数据到队列中

print("队列新增数据内存地址:",id(q)) #打印对象内存地址

if __name__ == "__main__":

q = Queue() #实例化进程队列

print("队列内存地址:",id(q)) #打印对象内存地址

for i in range(3): #for循环调用

p = Process(target=f,args=(q,i)) #建立进程,值通过args传值

p.start() #启用进程

print(q.get()) #拿队列中的值

print(q.get())

print(q.get())

队列内存地址: 1858644890400

队列新增数据内存地址: 2587420171064

1

队列新增数据内存地址: 2744677276528

2

队列新增数据内存地址: 2763448032056

5

生产消费者模型

# -*- coding:utf-8 -*-

import time,random

import queue,threading

q = queue.Queue()

def Producer(name):

count = 0 #初始化值(生产数量)

while count < 10: #指定生产数量

print("生产中...")

time.sleep(10) #随机时间用于测试

count += 2 #生产数值

q.put(count) #添加数值到队列

q.task_done() #向队列发送消息

print("%s生产%s个包子" %(name,count))

print ("今天的包子卖完了!")

def Consumer(name):

count = 0 #初始化值(消费数量)

while count < 10: #指定消费数量

time.sleep(random.randrange(4)) #随机时间用于测试

# if not q.empty(): #判断队列中是否有数值

q.join()

count += 1 #消费数值

data = q.get(count) #从队列中拿取数值

q.join() #等待其他线程(等待包子制作完成)

print("%s买走了%s了" %(name,data))

p1 = threading.Thread(target=Producer,args=('厨师',)) #生产者

c1 = threading.Thread(target=Consumer,args=('客人-小明',)) #消费者

c2 = threading.Thread(target=Consumer,args=('客人-小王',)) #消费者

p1.start()

c1.start()

c2.start()

生产中...

厨师生产2个包子

生产中...

客人-小明买走了2了

厨师生产4个包子

生产中...

客人-小王买走了4了

厨师生产6个包子

生产中...

客人-小明买走了6了

厨师生产8个包子

生产中...

客人-小王买走了8了

厨师生产10个包子

客人-小明买走了10了

今天的包子卖完了!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值