将队列转储到python中的列表/数组中

the*_*tna 10 python queue deque

我正在运行许多线程并在队列中收集结果.我想将其转储到数组或列表中,以便我可以进行索引并检索这些结果.队列中的每个元素都是维度为n的数组.我想访问这些数组.请你告诉我,我怎么办?

 def dump_queue(model_queue):
 queue_list = []
 for i in iter(model_queue.get,'STOP'):
         queue_list.append(i)
  return queue_list




aux_model=train_svm(np.array(trainExample),np.array(trainLabel))
model_queue.put(aux_model.coef_)
Run Code Online (Sandbox Code Playgroud)

因此,数组是学习的模型参数svm.model_queue在线程之间共享.我想访问每个模型参数向量而不是模型参数的每个条目.

gro*_*ina 34

你完成了并行部分,只想将结果放在一个列表中,是吗?然后尝试:

list(my_queue.queue)
Run Code Online (Sandbox Code Playgroud)

例:

from queue import Queue

q = Queue()
for i in range(5):
    q.put(i)

l = list(q.queue)
print(l)
Run Code Online (Sandbox Code Playgroud)

输出:

[0, 1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

  • 为了充分披露,我认为应该注意到“Queue.queue”属性没有记录,尽管它似乎不是私有的,因为它没有前导“_”字符,这使得它的状态至少有点在我看来有点模糊——换句话说,它似乎可能只是一个“实现细节”…… (4认同)
  • 这会将项目留在队列中还是将其删除? (2认同)

rob*_*ant 5

不确定这是否是同样的问题,但我需要做同样的事情并最终写了这个。我在 python 2.7 中使用 threading.Thread 和 Queue 对象。并且只想将队列转储到列表中。

def queue_to_list(q):
    """ Dump a Queue to a list """

    # A new list
    l = []

    while q.qsize() > 0:
        l.append(q.get())
    return l
Run Code Online (Sandbox Code Playgroud)


Ski*_*ect 1

就像加布里埃尔说的,你应该具体说明你的问题。

当您谈到数组时,我认为您指的是列表。Python 数组用于存储数值。

但是,您可以采取什么措施将队列转换为嵌套列表:#输出列表:

collectedData = list()
# # # 
# for every thread, call:
threadBuffer = [item for item in q.queue]
collectedData.append(threadBuffer)
Run Code Online (Sandbox Code Playgroud)

这将在嵌套列表中收集您的数据,您可以轻松访问这些数据,如下例所示:

l = list()
l.append([1,2,3,4,5,6,7,9,10])
l.append([6,7,8,9,0,11,22,33])
Run Code Online (Sandbox Code Playgroud)

现在您可以自由访问:

l[1][2] -> 8
Run Code Online (Sandbox Code Playgroud)