假设我有一个包含300个元素的多线程队列myQueue
。我可以删除100个最老的,而不必在for循环中反复调用myQueue.get()
100次吗?
注意
试图避免使用for循环似乎是一个奇怪的目标,但我正在寻找提高性能和增加代码简单性的方法。这就是为什么我希望能够以非迭代方式处理队列(删除元素)的原因。
答案 0 :(得分:0)
我发现这样的东西起作用,似乎它并没有违反任何线程安全规则。
实施例
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))