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

 更新时间:2021年02月28日 10:11:13   作者:小妮浅浅  
在本篇文章里小编给大家整理的一篇关于python线程优先级队列知识点总结,有兴趣的朋友们可以学习参考下。

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

1、说明

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

模块中的常用方法如下:

  • Queue.qsize() 返回队列的大小
  • Queue.empty() 如果队列为空,返回True,反之False
  • Queue.full() 如果队列满了,返回True,反之False
  • Queue.full 与 maxsize 大小对应
  • 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、实例

#!/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线程优先级队列有哪些内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pytorch打印网络结构的实例

    pytorch打印网络结构的实例

    今天小编就为大家分享一篇pytorch打印网络结构的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • python爬取百度贴吧前1000页内容(requests库面向对象思想实现)

    python爬取百度贴吧前1000页内容(requests库面向对象思想实现)

    这篇文章主要介绍了python爬取百度贴吧前1000页内容(requests库面向对象思想实现),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • python 实现图片上传接口开发 并生成可以访问的图片url

    python 实现图片上传接口开发 并生成可以访问的图片url

    今天小编就为大家分享一篇python 实现图片上传接口开发 并生成可以访问的图片url,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python通过Seq2Seq实现闲聊机器人

    python通过Seq2Seq实现闲聊机器人

    这篇文章主要介绍了python通过Seq2Seq实现闲聊机器人,文中有非常详细的代码示例,对正在学习python的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-04-04
  • pytorch的backward()的底层实现逻辑详解

    pytorch的backward()的底层实现逻辑详解

    自动微分是一种计算张量(tensors)的梯度(gradients)的技术,它在深度学习中非常有用,这篇文章主要介绍了pytorch的backward()的底层实现逻辑,需要的朋友可以参考下
    2023-11-11
  • 用Python做个自动化弹钢琴脚本实现天空之城弹奏

    用Python做个自动化弹钢琴脚本实现天空之城弹奏

    突然灵机一动,能不能用Python自动化脚本弹奏一曲美妙的钢琴曲呢?今天就一起带大家如何用Python实现自动化弹出一首《天空之城》有需要的朋友可以借鉴参考下
    2021-09-09
  • python 包 requests 实现请求操作

    python 包 requests 实现请求操作

    这篇文章主要介绍了python 包 requests 实现请求操作,文章介绍内容包括带参数请求、自定义headers,文章内容详细具有一定的参考价值,需要的小伙伴可以参考一下
    2022-04-04
  • 关于python如何生成exe文件

    关于python如何生成exe文件

    这篇文章主要介绍了关于python如何生成exe文件,exe全称“executable”,中文意思为“可执行的”,是一种文件格式,是指一种可在操作系统存储空间中浮动定位的可执行程序,需要的朋友可以参考下
    2023-04-04
  • Python四大金刚之字典详解

    Python四大金刚之字典详解

    这篇文章主要介绍了Python的字典,小编觉得这篇文章写的还不错,需要的朋友可以参考下,希望能够给你带来帮助
    2021-10-10
  • 利用Python如何将数据写到CSV文件中

    利用Python如何将数据写到CSV文件中

    在数据分析中经常需要从csv格式的文件中存取数据以及将数据写书到csv文件中。下面这篇文章主要给大家介绍了关于利用Python如何将数据写到CSV文件中的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-06-06

最新评论