zoukankan      html  css  js  c++  java
  • python 3.x 学习笔记16 (队列queue 以及 multiprocessing模块)

    1.队列(queue)

    用法:

    import queue
    q = queue.Queue()    #先进先出模式
    q.put(1)                    #存放数据在q里


    作用: 1)解耦
         2)提高效率

    class queue.Queue(maxsize=0)                        #先入先出
    class queue.LifoQueue(maxsize=0)                  #后进先出
    class queue.PriorityQueue(maxsize=0)             #存储数据时可设置优先级的队列

    Queue.qsize()                                                    #   返回队列的大小
    Queue.empty()                                                   # 如果队列为空,返回True,反之False
    Queue.full()                                                        #如果队列满了,返回True,反之
    Queue.get([block[, timeout]])                              # 获取队列,timeout等待时间
    Queue.get_nowait()                                             #相当Queue.get(False)
    Queue.put(item)                                                    #写入队列,timeout等待时间( 非阻塞)
    Queue.put_nowait(item)                                      # 相当Queue.put(item, False)
    Queue.task_done()                                              #在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号
    Queue.join()                                                           #实际上意味着等到队列为空,再执行别的操作

    2.python多线程不适合cpu密集操作型的任务,适合io操作密集型的任务

    3.multiprocessing模块 

    官方详解:https://docs.python.org/3.5/library/multiprocessing.html#module-multiprocessing

    1).pipe(管道)                             

    multiprocessing.Pipe()即管道模式,调用Pipe()返回管道的两端的Connection。


    2).manager
    multiprocessing.manager()
    用于多进程之间信息的共享


    3).Pool(进程池)
    multiprocessing.Pool()
      1)进程池内部维护一个进程序列,当使用时,则去进程池中获取一个进程,如果进程池序列中没有可供使用的进进程,那么程序就会等待,直到进程池中有可用进程为止。

      2)在windos上必须写上if __name__=='__main__':之后才生成进程池才不会出错进程池中进程执行完毕后再关闭,如果注释,那么程序直接关闭。

      3)进程池两个方法
        apply() 穿行
        apply_async() 并行
        注:pool.apply_async(func=Foo, args=(i,), callback=Bar)#callback回调Bar

    6.if __name__=='__main__':
    _name__ 是当前模块名,当模块被直接运行时模块名为 __main__ 。这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行。

  • 相关阅读:
    TIOBE 11月指数:C语言居首,稳居宝座,Python直逼第二!
    毕业即失业?大学生如何分配学习时间比例,拥有完整计算机知识体系?
    用微信表情翻译表白,程序员的小浪漫,赶紧Get起来!
    趣文分享:C 语言和 C++、C# 的区别在什么地方?
    C++基础知识篇:C++ 基本语法
    盘点那些争议最大的编程观点,你是什么看法呢?
    小米死磕硬核技术,将扩招5000名工程师,多个领域会使用到C++
    Gentle guide on how YOLO Object Localization works with Keras (Part 2)
    HUMBLE YOLO IMPLEMENTATION IN KERAS
    Training and Detecting Objects with YOLO3
  • 原文地址:https://www.cnblogs.com/hsj-jingyu/p/8476445.html
Copyright © 2011-2022 走看看