如何在不使用 for 循环的情况下从多线程队列中删除大量元素

How to remove a lot of elements from a multithread queue without using a for loop

假设我有一个包含 300 个元素的多线程队列 myQueue。我可以删除最旧的 100 个,而不必在 for 循环中迭代调用 myQueue.get() 100 次吗?

注意

试图避免使用 for 循环似乎是一个奇怪的目标,但我正在寻找提高性能和增加代码简单性的方法。这就是为什么我希望能够以非迭代方式处理队列(删除元素)。

我发现类似的东西可以工作,而且它似乎也没有违反任何线程安全规则。

例子

import Queue

myQueue = Queue.Queue()
for i in range(1,100):
    myQueue.put(i)
amount = [i for i in range(1,10)]
map(myQueue.get, amount)  # that will result in removing the 10 oldest elements

这相当于使用 for 循环,但循环代码是用 C 语言实现的,可以带来更好的性能。

另一种方法是使用 map() 内置函数的并行等效项。这会将必须在循环中处理的块划分到不同的进程中

import multiprocessing
pool = multiprocessing.Pool()
pool.map(myQueue.get, range(1, 10))