多线程queue

一、class queue.Queue(maxsize=0) #队列:先进先出

import queue

q=queue.Queue()
q.put('first')
q.put('second')
q.put('third')

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



'''
结果(先进先出):
first
second
third
'''

 

二、class queue.LifoQueue(maxsize=0) #堆栈:last in fisrt out

import queue

q=queue.LifoQueue()
q.put('first')
q.put('second')
q.put('third')

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



'''
结果(后进先出):
third
second
first
'''

三、class queue.PriorityQueue(maxsize=0) #优先级队列:存储数据时可设置优先级的队列

import queue

q=queue.PriorityQueue()
#put进入一个元组,元组的第一个元素是优先级(通常是数字,也可以是非数字之间的比较),数字越小优先级越高
q.put((20,'a'))
q.put((10,'b'))
q.put((30,'c'))

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



'''
结果(数字越小优先级越高,优先级高的优先出队):
(10, 'b')
(20, 'a')
(30, 'c')
'''

 

### Python多线程Queue模块的使用 在Python中,`Queue` 是一个多线程安全的队列实现,适用于在线程间传递数据并保持同步。以下是关于 `Queue` 和多线程结合使用的详细介绍以及一个完整的示例。 #### Queue 的基本操作 - **创建队列**: 可以通过 `import queue` 或者直接导入标准库中的 `Queue` 来创建队列对象。 - **put 方法**: 将数据放入队列中。如果队列已满,则会阻塞或者抛出异常 (取决于参数设置)[^1]。 - **get 方法**: 从队列中获取数据。如果没有可用的数据项,则会阻塞直到有新的数据被加入到队列中。 - **task_done 方法**: 当消费者完成一项任务处理后调用此方法通知生产者该任务已经结束。 - **join 方法**: 阻塞当前线程,直至队列中的所有项目都被处理完毕。 #### 示例代码展示 下面是一个具体的例子展示了如何利用 `Queue` 实现两个线程之间的通信: ```python import threading import time from queue import Queue def producer(queue): """模拟生产者的角色""" for i in range(5): item = f'Item-{i}' print(f'[Producer] Producing {item}') queue.put(item, block=True) # 向队列添加元素 time.sleep(0.5) def consumer(queue): """模拟消费者的逻辑""" while True: try: item = queue.get(timeout=3) # 获取队列中的元素 print(f'[Consumer] Consuming {item}') queue.task_done() # 告诉队列这个任务完成了 except Exception as e: break if __name__ == '__main__': q = Queue(maxsize=10) # 初始化最大容量为10的队列 p_thread = threading.Thread(target=producer, args=(q,)) c_thread = threading.Thread(target=consumer, args=(q,)) p_thread.start() c_thread.start() p_thread.join() # 主线程等待生产者线程结束 q.join() # 等待所有的任务都完成后退出程序 print('All tasks are done.') ``` 上述代码定义了一个生产者函数和一个消费者函数,并通过 `Queue` 进行交互。这里设置了超时时间防止无限期挂起[^2]。 #### 参数说明 当实例化线程的时候可以通过指定目标函数及其参数来进行初始化。注意这里的参数需要传入的是元组形式,即使只有一个参数也需要加上逗号表示其为元组类型[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值