[英]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.