• 技术文章 >Python技术 >Python基础教程

    python线程优先级队列有哪些?

    小妮浅浅小妮浅浅2021-02-26 17:55:37原创4918

    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 ("退出主线程")

    以上就是python线程优先级队列的介绍,希望能对大家有所帮助。更多Python学习指路:python基础教程

    专题推荐:python线程优先级队列
    上一篇:python如何定义具名元组? 下一篇:python中pyg2plot如何使用?

    相关文章推荐

    • Python Selenium操作Cookie的方法• python常量折叠是什么• python元组拆包如何实现?• python如何定义具名元组?

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网