• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    python线程优先级队列知识点总结

    Python 的 Queue 模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列 PriorityQueue。

    1、说明

    这些队列都实现了锁原语,能够在多线程中直接使用,可以使用队列来实现线程间的同步。

    模块中的常用方法如下:

    2、实例

    #!/usr/bin/python3
    import queue
    import threading
    import time
    exitFlag = 0
    class myThread (threading.Thread):
      def __init__(self, threadID, name, q):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.q = q
      def run(self):
        print ("开启线程:" + self.name)
        process_data(self.name, self.q)
        print ("退出线程:" + self.name)
    def process_data(threadName, q):
      while not exitFlag:
        queueLock.acquire()
        if not workQueue.empty():
          data = q.get()
          queueLock.release()
          print ("%s processing %s" % (threadName, data))
        else:
          queueLock.release()
        time.sleep(1)
    threadList = ["Thread-1", "Thread-2", "Thread-3"]
    nameList = ["One", "Two", "Three", "Four", "Five"]
    queueLock = threading.Lock()
    workQueue = queue.Queue(10)
    threads = []
    threadID = 1
    # 创建新线程
    for tName in threadList:
      thread = myThread(threadID, tName, workQueue)
      thread.start()
      threads.append(thread)
      threadID += 1
    # 填充队列
    queueLock.acquire()
    for word in nameList:
      workQueue.put(word)
    queueLock.release()
    # 等待队列清空
    while not workQueue.empty():
      pass
    # 通知线程是时候退出
    exitFlag = 1
    # 等待所有线程完成
    for t in threads:
      t.join()
    print ("退出主线程")

    知识点扩展:

    问题

    怎样实现一个按优先级排序的队列? 并且在这个队列上面每次 pop 操作总是返回优先级最高的那个元素

    解决方案

    下面的类利用 heapq 模块实现了一个简单的优先级队列:

    import heapq
    
    class PriorityQueue:
     def __init__(self):
     self._queue = []
     self._index = 0
    
     def push(self, item, priority):
     heapq.heappush(self._queue, (-priority, self._index, item))
     self._index += 1
    
     def pop(self):
     return heapq.heappop(self._queue)[-1]

    下面是它的使用方式:

    >>> class Item:
    ... def __init__(self, name):
    ...  self.name = name
    ... def __repr__(self):
    ...  return 'Item({!r})'.format(self.name)
    ...
    >>> q = PriorityQueue()
    >>> q.push(Item('foo'), 1)
    >>> q.push(Item('bar'), 5)
    >>> q.push(Item('spam'), 4)
    >>> q.push(Item('grok'), 1)
    >>> q.pop()
    Item('bar')
    >>> q.pop()
    Item('spam')
    >>> q.pop()
    Item('foo')
    >>> q.pop()
    Item('grok')
    >>>

    到此这篇关于python线程优先级队列知识点总结的文章就介绍到这了,更多相关python线程优先级队列有哪些内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • 如何通过Python实现RabbitMQ延迟队列
    • python分布式爬虫中消息队列知识点详解
    • Python通过队列来实现进程间通信的示例
    • Python collections.deque双边队列原理详解
    • 基于python实现操作redis及消息队列
    • Python Celery异步任务队列使用方法解析
    • Python实现一个优先级队列的方法
    • Python如何使用队列方式实现多线程爬虫
    • Python多线程通信queue队列用法实例分析
    • python3 deque 双向队列创建与使用方法分析
    • Python实现队列的方法示例小结【数组,链表】
    • 详解python数据结构之队列Queue
    上一篇:利用Opencv实现图片的油画特效实例
    下一篇:python推导式的使用方法实例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    python线程优先级队列知识点总结 python,线程,优先级,队列,