python队列基本操作和多线程队列的完整攻略如下:
一、Python队列基本操作
1. 创建队列
Python标准库提供了queue模块来支持队列操作。我们可以使用queue.Queue类来创建一个队列:
import queue
q = queue.Queue()
2. 向队列中添加元素
使用put()方法向队列中添加元素:
q.put('item')
3. 从队列中获取元素
使用get()方法从队列中获取元素:
item = q.get()
4. 判断队列是否为空
使用empty()方法可以判断队列是否为空:
if q.empty():
print('队列为空')
else:
print('队列不为空')
5. 获取队列大小
使用qsize()方法获取队列当前的元素个数:
size = q.qsize()
二、多线程队列
在多线程环境下,为了避免多线程之间的竞争和冲突,需要使用线程安全的队列。Python标准库中提供了queue模块来支持线程安全的队列操作。
1. 创建线程安全队列
使用queue.Queue()类创建队列时,它并不是线程安全的,若要创建线程安全的队列,可以使用queue模块中的queue.Queue()类的子类queue.Queue:
import queue
import threading
q = Queue()
2. 向队列中添加元素
使用put()方法向线程安全队列中添加元素:
q.put('item')
3. 从队列中获取元素
使用get()方法从线程安全队列中获取元素:
item = q.get()
4. 判断队列是否为空
使用empty()方法可以判断线程安全队列是否为空:
if q.empty():
print('队列为空')
else:
print('队列不为空')
5. 获取队列大小
使用qsize()方法获取线程安全队列当前的元素个数:
size = q.qsize()
示例1:
import threading
from queue import Queue
def worker(q: Queue):
while True:
item = q.get()
if item is None:
break
print(f'处理任务: {item}')
q.task_done()
q = Queue()
num_worker_threads = 4
threads = []
for i in range(num_worker_threads):
t = threading.Thread(target=worker, args=(q,))
t.start()
threads.append(t)
for item in range(20):
q.put(item)
# 阻塞,等待队列为空才退出
q.join()
# 停止工作线程
for i in range(num_worker_threads):
q.put(None)
for t in threads:
t.join()
示例2:
import threading
import queue
import time
def producer(q: queue.Queue):
for i in range(5):
print(f'生产者生产数据{i}')
q.put(i)
time.sleep(1)
def consumer(q: queue.Queue):
while True:
item = q.get()
if item is None:
break
print(f'消费者消费数据{item}')
q.task_done()
q = queue.Queue()
t1 = threading.Thread(target=producer, args=(q,))
t2 = threading.Thread(target=consumer, args=(q,))
t1.start()
t2.start()
t1.join()
q.join()
q.put(None)
t2.join()
以上就是Python队列基本操作和多线程队列的完整攻略,希望对你有帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python队列基本操作和多线程队列 - Python技术站