pythonqueue多线程_Python使用Queue对象实现多线程同步小案例

该博客介绍了如何使用Python的queue模块实现多线程间的生产者消费者队列。生产者线程生成随机数量的元素并放入队列,消费者线程则从队列中取出并消费这些元素。示例展示了线程间同步的基本操作,如put()和get()方法,并通过随机延时模拟了实际场景中的并发行为。
摘要由CSDN通过智能技术生成

queue模块的Queue对象实现了多生产者/多消费者队列,尤其适合需要在多个线程之间进行信息交换的场合,实现了多线程编程所需要的所有锁语义。

Queue对象主要实现了put()和get()方法,分别用来往队列尾部追加元素和在队列头部获取并删除元素。这两个方法都允许指定超时时间,其用法分别为put(item, block=True, timeout=None)和get(block=True, timeout=None)

在下面的代码中,自定义了生产者线程类和消费者线程类,生产者生产随机数量个元素并放置到队列中,消费者则从队列中依次获取其中的元素。

from threading import Thread

from time import sleep

from queue import Queue

from random import randrange

class Producer(Thread):

'''自定义生产者线程类'''

def __init__(self, threadname):

Thread.__init__(self,\

name=threadname)

def run(self):

'''线程运行代码'''

total = randrange(20)

for i in range(total):

# 等待随机时间后往队列中放入一个元素

sleep(randrange(3))

myQueue.put(i)

print(self.getName(),\

' put ', i,\

' to queue.')

# None表示生产者线程结束

myQueue.put(None)

class Consumer(Thread):

def __init__(self, threadname):

Thread.__init__(self,\

name=threadname)

def run(self):

while True:

sleep(randrange(3))

item = myQueue.get()

if itemis None:

break

print(self.getName(),\

' get ', item,\

' from queue.')

# 创建队列

myQueue = Queue()

# 创建并启动生产者和消费者线程

Producer('Producer').start()

Consumer('Consumer').start()

第一次运行结果:

Producer put 0 to queue.

Producer put 1 to queue.

Producer put 2 to queue.

Producer put 3 to queue.

Producer put 4 to queue.

Consumer get 0 from queue.

Producer put 5 to queue.

Consumer get 1 from queue.

Consumer get 2 from queue.

Producer put 6 to queue.

Producer put 7 to queue.

Consumer get 3 from queue.

Consumer get 4 from queue.

Consumer get 5 from queue.

Consumer get 6 from queue.

Consumer get 7 from queue.

第二次运行结果:

Producer put 0 to queue.

Consumer get 0 from queue.

Producer put 1 to queue.

Consumer get 1 from queue.

Producer put 2 to queue.

Consumer get 2 from queue.

Producer put 3 to queue.

Consumer get 3 from queue.

Producer put 4 to queue.

Producer put 5 to queue.

Consumer get 4 from queue.

Consumer get 5 from queue.

Producer put 6 to queue.

Consumer get 6 from queue.

Producer put 7 to queue.

Consumer get 7 from queue.

Producer put 8 to queue.

Producer put 9 to queue.

Consumer get 8 from queue.

Consumer get 9 from queue.

Producer put 10 to queue.

Consumer get 10 from queue.

Producer put 11 to queue.

Consumer get 11 from queue.

Tag标签:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值