美文网首页Python小哥哥
Python消息队列补充及如何创建线程池

Python消息队列补充及如何创建线程池

作者: 我爱学python | 来源:发表于2019-06-01 15:57 被阅读11次

 消息队列的先进先出

首先,要告诉大家的事,消息队列可不是只有queue.Queue这一个类,除它之外,还有queue.LifoQueue和queue.PriorityQueue这两个类。

从名字上,对于他们之间的区别,你大概也能猜到一二吧。

queue.Queue:先进先出队列

queue.LifoQueue:后进先出队列

queue.PriorityQueue:优先级队列

先来看看,我们的老朋友,queue.Queue。

所谓的先进先出(FIFO,First in First Out),就是先进入队列的消息,将优先被消费。

这和我们日常排队买菜是一样的,先排队的人肯定是先买到菜。

用代码来说明一下

看看输出,符合我们先进先出的预期。存入队列的顺序是01234,被消费的顺序也是01234。

再来看看Queue.LifoQueue,后进先出,就是后进入消息队列的,将优先被消费。

这和我们羽毛球筒是一样的,最后放进羽毛球筒的球,会被第一个取出使用。

用代码来看下

来看看输出,符合我们后进后出的预期。存入队列的顺序是01234,被消费的顺序也是43210。

最后来看看Queue.PriorityQueue,优先级队列。

这和我们日常生活中的会员机制有些类似,办了金卡的人比银卡的服务优先,办了银卡的人比不办卡的人服务优先。

来用代码看一下

来看看输出,符合我们的预期。我们存入入队列的顺序是25341,对应的优先级也是25341,可是被消费的顺序丝毫不受传入顺序的影响,而是根据指定的优先级来消费。


创建多线程的两种方式

在使用多线程处理任务时也不是线程越多越好,由于在切换线程的时候,需要切换上下文环境,依然会造成cpu的大量开销。为解决这个问题,线程池的概念被提出来了。预先创建好一个较为优化的数量的线程,让过来的任务立刻能够使用,就形成了线程池。

在Python3中,创建线程池是通过concurrent.futures函数库中的ThreadPoolExecutor类来实现的。

从结果来看,前面设置线程池最大线程数5个,有生效。

除了使用上述第三方模块的方法之外,我们还可以自己结合前面所学的消息队列来自定义线程池。

这里我们就使用queue来实现一个上面同样效果的例子,大家感受一下。

输出是和上面是完全一样的效果

构建线程池的方法,是可以很灵活的,大家有举可以自己多研究。但是建议只要掌握一种自己熟悉的,能快速上手的就好了。

相关文章

  • Python消息队列补充及如何创建线程池

    消息队列的先进先出 首先,要告诉大家的事,消息队列可不是只有queue.Queue这一个类,除它之外,还有queu...

  • 20.多线程总结(七)-ThreadPoolExecutor线程

    1.如何创建一个线程池? 2.线程池运行机制 a.new线程池时,线程池工作队列中已经被添加的Runnable是否...

  • java中的线程池

    线程池创建的参数 线程池的基本大小(核心线程数) 任务队列(ArrayBlockingQueue/LinkedBl...

  • 线程池使用及优势

    线程池使用及优势 线程池的主要工作是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如...

  • 线程池的工作过程

    线程池的工作过程 线程池刚创建时,里面没有一个线程。任务队列是作为参数传进来的。不过,就算队列里面有任务,线程池也...

  • 线程池之运行过程原理

    在刚开始提交任务的时候,线程池会创建核心线程,等核心线程创建完毕,开始将任务加入阻塞队列,队列满了之后最后才创建非...

  • java线程池自动扩容

    线程池构造方法有几个重要参数: 当线程池核心数量不够时,新加入的任务会被存放在队列中,如果队列存满了,线程池会创建...

  • 干货,阿里P8浅谈对java线程池的理解(面试必备)

    线程池的概念 线程池由任务队列和工作线程组成,它可以重用线程来避免线程创建的开销,在任务过多时通过排队避免创建过多...

  • 线程池

    一 线程池简介 线程池由任务队列和工作线程组成,它可以重用线程来避免线程创建的开销,在任务过多时通过排队避免创建过...

  • Java线程池ThreadPoolExcutor

    1.线程池的工作原理: 1.1线程池刚创建时,里面没有一个线程。任务队列是作为参数传进来的。不过,就算队列里面有任...

网友评论

    本文标题:Python消息队列补充及如何创建线程池

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