美文网首页
效率提升之进程同步(Queue)

效率提升之进程同步(Queue)

作者: 心水Diana | 来源:发表于2019-03-05 09:20 被阅读0次
    Queue:共享消息队列

    Queue 模块来提供进程间通信的机制,从而让线程之间可以互相分享数据。


    queue队列

    有三种模式

    • Queue(maxsize=0)

      • 创建一个先入先出的队列,没有给定最大值即无限队列
    • LifoQueue(maxsize=0)

      • 创建一个先入后出的队列,没有给定最大值即无限队列
    • PriorityQueue(maxsize=0)

      • 创建一个优先级队列,没有给定最大值即无限队列
    属性与异常
    • 异常
    Empty   当对空队列调用get()方法时抛出异常
    Full    当对已满的队列调用put()方法时抛出异常
    
    • 属性
    qsize()  返回队列大小(由于返回时队列大小可能被其他线程修改,所以该值为近似值)
    empty()  如果队列为空,则返回True;否则,返回False
    full()   如果队列已满,则返回True;否则,返回False
    put(item, block=Ture, timeout=None)  将item 放入队列。如果block 为True(默认)且timeout 为None,则在有可用空间之前阻塞;如果timeout 为正值,则最多阻塞timeout 秒;如果block 为False,则抛出Empty 异常
    
    put_nowait(item)  和put(item, False)相同,即非阻塞
    get (block=True, timeout=None) 从队列中取得元素。如果给定了block(非0),则一直阻塞到有可用的元素为止
    
    get_nowait() 和get(False)相同,即非阻塞
    
    
    • 生产者消费者模型
    from multiprocessing import Process, Queue
    
    
    def consumer(q):
        '''
        消费者
        '''
        for i in range(10):
            res = q.get()
            print('取出来%s'%res)
    
    def producer(q):
        '''
        生产者
        '''
        for i in range(10):
            res = q.put(i+10)  # 成功则会返回none
            print('放进去:%s'%res)
    
    def main():
        q = Queue()
        process_producer = Process(target=producer, args=(q,))
        process_consumer = Process(target=consumer, args=(q,))
    
    
        process_producer.start()
        process_consumer.start()
    
        process_producer.join()
        process_consumer.join()
    
    if __name__ == '__main__':
        main()
    
    

    相关文章

      网友评论

          本文标题:效率提升之进程同步(Queue)

          本文链接:https://www.haomeiwen.com/subject/sqoguqtx.html