前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python使用Queue对象实现多线程同步小案例

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

作者头像
Python小屋屋主
发布2018-04-16 17:16:57
8420
发布2018-04-16 17:16:57
举报
文章被收录于专栏:Python小屋Python小屋

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 item is 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.

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档