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

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

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

    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、实例

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    #!/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学习网