簡體   English   中英

如何在不使用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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM