python 归纳 (十四)_队列Queue实现生产者消费者

# -*- coding: UTF-8 -*-
"""
多线程的生产者,消费者
使用队列Queue

"""
import Queue
import threading
import time
import random

queue = Queue.Queue(3)  # 创建3个大小的队列

class Producer(threading.Thread):
    """
    生产者,往队列中写数据
    """
    def __init__(self, queue):
        super(Producer, self).__init__()  # 调用父类构造函数
        self.queue = queue

    def run(self):
        while True:
            my_rand_double = random.random()
            self.queue.put(my_rand_double)      # 往队列写数据
            print "producer randonm %f \n" % (my_rand_double)
            time.sleep(2)

class Consumer(threading.Thread):
    """
    消费者,从队列中读取数据
    """
    def __init__(self, queue):
        super(Consumer, self).__init__()
        self.queue = queue

    def run(self):
        while True:
            my_data = self.queue.get()          # 从队列读数据
            print "consumer:",my_data,"\n"
            time.sleep(1)

if __name__ == ‘__main__‘:

    print "begin....\n"

    # 启动线程
    Producer(queue).start()
    Consumer(queue).start()
    Consumer(queue).start()

    print "main end....\n"

"""
Out:

begin....

producer randonm 0.321120

consumer: 0.32111958348

main end....

producer randonm 0.340942

consumer: 0.340942161065

producer randonm 0.672640

consumer: 0.672639677729

producer randonm 0.940307

consumer: 0.940307007999

producer randonm 0.497011

consumer: 0.497011018834

"""

原文地址:https://www.cnblogs.com/sunzebo/p/9612357.html

时间: 2024-11-01 05:01:17

python 归纳 (十四)_队列Queue实现生产者消费者的相关文章

python 归纳 (十二)_并发队列Queue的使用

# -*- coding: UTF-8 -*- """ 学习队列 Queue 总结: 1. 队列可以设置大小,也可以无限大小 2. 空了,满了,读写时可以阻塞,也可以报错 3. 队列中可以存储不同的数据类型对象 4. 队列的实现大量用到 线程模块 threading ,说明适用多线程之间的数据共享操作 不确定是否适合多进程之间的数据共享操作 5. 队列的实现用到锁操作,acquire,release,wait,notify 不需要在个人代码中使用 使用: 1. 创建队列对象

Python学习笔记——进阶篇【第九周】———线程、进程、协程篇(队列Queue和生产者消费者模型)

Python之路,进程.线程.协程篇 本节内容 进程.与线程区别 cpu运行原理 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 Queue队列 开发一个线程池 进程 语法 进程间通讯 进程池 参考链接http://www.cnblogs.com/alex3714/articles/5230609.html

python 归纳 (十五)_多进程使用Pool

1 usePool.py #coding: utf-8 """ 学习进程池使用 multiprocessing.Pool 总结: 1. Pool 池用于处理 多进程,并不是多线程 2. 池有大小的概念 3. 并不是所有的子进程添加完了,才开始启动子进程. 当第一个进程添加到池中的时候,马上就启动了 使用: 1. 创建进程池对象 pool = multiprocessing.Pool(processes = 3) 2. 往池中添加进程 主要:pool.apply_async(f

初学 Python(十四)——生成器

初学 Python(十四)--生成器 初学 Python,主要整理一些学习到的知识点,这次是生成器. # -*- coding:utf-8 -*- ''''' 生成式的作用: 减少内存占有,不用一次性 创建list中所有的元素,而 是在需要的时候创建 ''' #创建generator有2种方式 #第一种将列表表达式中的[]改为()即可 g = (x*x for x in range(10)) print g for n in g: print n #第二种,关键字yield def fab(ma

如何使用阻塞队列来实现生产者-消费者模型?

什么是阻塞队列?如何使用阻塞队列来实现生产者-消费者模型? java.util.concurrent.BlockingQueue的特性是:当队列是空的时,从队列中获取或删除元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞. 阻塞队列不接受空值,当你尝试向队列中添加空值的时候,它会抛出NullPointerException. 阻塞队列的实现都是线程安全的,所有的查询方法都是原子的并且使用了内部锁或者其他形式的并发控制. BlockingQueue 接口是java colle

python并发编程之多进程(二):互斥锁(同步锁)&进程其他属性&进程间通信(queue)&生产者消费者模型

一,互斥锁,同步锁 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 竞争带来的结果就是错乱,如何控制,就是加锁处理 part1:多个进程共享同一打印终端 #并发运行,效率高,但竞争同一打印终端,带来了打印错乱 from multiprocessing import Process import os,time def work(): print('%s is running' %os.getpid()) time.sleep(2) print('

queue队列,以及生产者消费者模型

queue 队列!特点是有序的,跟list的区别,list调用元素,其实就是复制,还要用remove给删掉,麻烦,queue更加方便 生成队列的方法: class queue.Queue(maxsize=0) #先入先出  #maxsize可以设定队列大小 class queue.LifoQueue(maxsize=0) #last in fisrt out  后进先出,例如卖东西,大家都喜欢新鲜的 class queue.PriorityQueue(maxsize=0) #存储数据时可设置优先

【[email protected]】queue模块-生产者消费者问题

python通过queue模块来提供线程间的通信机制,从而可以让线程分项数据. 个人感觉queue就是管程的概念 一个生产者消费者问题 1 from random import randint 2 from threading import Thread 3 from queue import Queue 4 from time import sleep 5 6 7 def writeq(queue): 8 print('starting put queue...') 9 queue.put('

进程_线程 之(五) --- 生产者消费者

同步锁 acquire([timeout])/release():  调用关联的锁的相应方法. wait([timeout]):   调用这个方法将使线程进入Condition的等待池等待通知,并释放锁.使用前线程必须已获得锁定,否则将抛出异常. notify():   调用这个方法将从等待池挑选一个线程并通知,收到通知的线程将自动调用acquire()尝试获得锁定(进入锁定池):其他线程仍然在等待池中.调用这个方法不会释放锁定.使用前线程必须已获得锁定,否则将抛出异常. notifyAll()