<tfoot id='ComvR'></tfoot>

      <small id='ComvR'></small><noframes id='ComvR'>

      <legend id='ComvR'><style id='ComvR'><dir id='ComvR'><q id='ComvR'></q></dir></style></legend>
      <i id='ComvR'><tr id='ComvR'><dt id='ComvR'><q id='ComvR'><span id='ComvR'><b id='ComvR'><form id='ComvR'><ins id='ComvR'></ins><ul id='ComvR'></ul><sub id='ComvR'></sub></form><legend id='ComvR'></legend><bdo id='ComvR'><pre id='ComvR'><center id='ComvR'></center></pre></bdo></b><th id='ComvR'></th></span></q></dt></tr></i><div id='ComvR'><tfoot id='ComvR'></tfoot><dl id='ComvR'><fieldset id='ComvR'></fieldset></dl></div>
          <bdo id='ComvR'></bdo><ul id='ComvR'></ul>
      1. python队列Queue的详解

        时间:2023-12-16

        <small id='wTZ6v'></small><noframes id='wTZ6v'>

          <bdo id='wTZ6v'></bdo><ul id='wTZ6v'></ul>
          <tfoot id='wTZ6v'></tfoot>
        • <legend id='wTZ6v'><style id='wTZ6v'><dir id='wTZ6v'><q id='wTZ6v'></q></dir></style></legend>
        • <i id='wTZ6v'><tr id='wTZ6v'><dt id='wTZ6v'><q id='wTZ6v'><span id='wTZ6v'><b id='wTZ6v'><form id='wTZ6v'><ins id='wTZ6v'></ins><ul id='wTZ6v'></ul><sub id='wTZ6v'></sub></form><legend id='wTZ6v'></legend><bdo id='wTZ6v'><pre id='wTZ6v'><center id='wTZ6v'></center></pre></bdo></b><th id='wTZ6v'></th></span></q></dt></tr></i><div id='wTZ6v'><tfoot id='wTZ6v'></tfoot><dl id='wTZ6v'><fieldset id='wTZ6v'></fieldset></dl></div>
              <tbody id='wTZ6v'></tbody>

                • Python队列(Queue)的详解

                  什么是队列?

                  队列是一种数据结构,特点是“先进先出”(First-In-First-Out, FIFO)。在队列中,新的元素被插入到队列的末尾,而队列中最先加入的元素则在队列的开头。想象一下在餐厅排队打饭,先来的先进去,后到的要等前面的人打完饭才能自己打。

                  Python中的队列

                  Python标准库提供了许多队列的实现,比如:

                  • queue:提供了多种队列(FIFO、LIFO等)的实现,可以线程安全的使用。
                  • heapq:提供堆(heap)的实现,这是一种特殊的队列,可用于对元素进行排序。

                  这篇文章主要介绍queue的使用。queue提供了两种队列的实现:

                  • Queue:常用于线程间通信,利用互斥锁(mutex)实现了线程安全。
                  • SimpleQueue:适用于单线程环境,没有线程安全保障,但执行速度较快。

                  Queue的基本方法

                  Queue提供了以下方法:

                  • put(item[, block[, timeout]]):将一个元素item添加到队列中。block参数决定当队列已满时的阻塞行为,默认为True;timeout参数用于指定等待的最长时间,默认为None,表示一直等下去。
                  • get([block[, timeout]]):从队列中移除并返回一个元素。block参数决定当队列为空时的阻塞行为,默认为True;timeout参数用于指定等待的最长时间,默认为None,表示一直等下去。
                  • qsize():返回队列中尚未被移出的元素数量。
                  • empty():如果队列为空,返回True;否则返回False。
                  • full():如果队列已满,返回True;否则返回False。
                  • task_done():当一个之前转入队列的任务完成时,向任务已经完成的消费者发出信号。
                  • join():阻塞调用线程,直到所有的任务都已经完成。

                  Queue的示例

                  示例1:单线程环境下的使用

                  from queue import Queue
                  
                  q = Queue()
                  
                  for i in range(5):
                      q.put(i)
                  
                  while not q.empty():
                      print(q.get())
                  

                  在这个示例中,我们创建一个Queue对象,并循环向队列中添加5个元素。然后从队列中一个个取出元素,并打印出来。

                  示例2:多线程环境下的使用

                  import time
                  from queue import Queue
                  from threading import Thread
                  
                  def worker(q: Queue):
                      while True:
                          task = q.get()
                          if task is None:
                              q.task_done()
                              break
                          print(f"Processing task: {task}")
                          time.sleep(1)
                          q.task_done()
                  
                  q = Queue()
                  
                  # 创建10个工作线程
                  n_worker_threads = 10
                  threads = []
                  for i in range(n_worker_threads):
                      t = Thread(target=worker, args=(q,))
                      t.start()
                      threads.append(t)
                  
                  # 在队列中放入20个任务
                  for i in range(20):
                      q.put(i)
                  
                  # 等待所有任务处理完成
                  q.join()
                  
                  # 给每个线程发放“结束”信号
                  for i in range(n_worker_threads):
                      q.put(None)
                  
                  # 等待所有线程结束
                  for t in threads:
                      t.join()
                  

                  在这个示例中,我们创建了一个有10个工作线程的队列。然后向队列中放入20个任务,让这10个工作线程并行地处理这些任务。一旦所有任务都处理完了,我们可以给每个工作线程发放“结束”信号,然后等待所有线程结束。

                  上一篇:Python实现简单网页图片抓取完整代码实例 下一篇:tensorflow使用range_input_producer多线程读取数据实例

                  相关文章

                    <bdo id='1vrxT'></bdo><ul id='1vrxT'></ul>

                    <i id='1vrxT'><tr id='1vrxT'><dt id='1vrxT'><q id='1vrxT'><span id='1vrxT'><b id='1vrxT'><form id='1vrxT'><ins id='1vrxT'></ins><ul id='1vrxT'></ul><sub id='1vrxT'></sub></form><legend id='1vrxT'></legend><bdo id='1vrxT'><pre id='1vrxT'><center id='1vrxT'></center></pre></bdo></b><th id='1vrxT'></th></span></q></dt></tr></i><div id='1vrxT'><tfoot id='1vrxT'></tfoot><dl id='1vrxT'><fieldset id='1vrxT'></fieldset></dl></div>
                    <legend id='1vrxT'><style id='1vrxT'><dir id='1vrxT'><q id='1vrxT'></q></dir></style></legend>
                  1. <tfoot id='1vrxT'></tfoot>

                  2. <small id='1vrxT'></small><noframes id='1vrxT'>