Python 队列线程性能



我有 2 个关于 python 中的线程和队列的问题。

  1. max_size arg 在queue.Queue()中做什么?
  2. 根据线程( num_worker_threads 的 #,是否有任何性能改进?我找不到任何改进。
    -> 如果根据线程的 # 没有改进,为什么我们需要这个?
import time 
import queue
import threading
num_worker_threads = 10
store = []
def worker():
    while True:
        item = q.get()
        if item is None:
            break
        store.append(item)
        q.task_done()

start = time.time()        
q = queue.Queue() # what does max_size do in queue?
threads = []
for i in range(num_worker_threads):
    t = threading.Thread(target=worker)
    t.start()
    threads.append(t)
for item in range(1000000):
    q.put(item)
# block until all tasks are done
q.join()
# stop workers
for i in range(num_worker_threads):
    q.put(None)
for t in threads:
    t.join()
end = time.time()
print('running time: {}'.format(end - start))

在队列上设置最大大小,以便为辅助角色提供限制机制。假设您有 X 生产者和 Y 使用者使用相同的队列,如果任何使用者抛出Queue.Full异常,您可以将其用作减慢生产速度的信号。

在您的情况下,由于工作实际上并没有做任何计算成本高昂的事情(只是附加到列表中,我可能会以不安全的方式添加),并且您只有 1 个生产者和 10 个消费者,因此队列很可能总是空的,而不是消费者处于空闲状态(如果 get 方法附加了超时,则会引发Queue.Empty异常。

作为旁注,为了确定哪些使用者和生产者处于空闲状态,您应该对队列的putget方法使用 timeout 参数

最新更新