我正在运行多个线程并在队列中收集结果。我想将其转储到数组或列表中,以便我可以进行索引并检索这些结果。队列中的每个元素都是维度为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_)
因此,数组是svm
的学习模型参数。 model_queue在线程之间共享。我想访问每个模型参数向量而不是每个模型参数的条目。
答案 0 :(得分:27)
您已经完成了并行部分,只想将结果放在列表中,是吗?然后尝试:
list(my_queue.queue)
示例:
from queue import Queue
q = Queue()
for i in range(5):
q.put(i)
l = list(q.queue)
print(l)
输出:
[0, 1, 2, 3, 4]
答案 1 :(得分:2)
不确定是否是同样的问题,但我需要做同样的事情并最终写出来。我在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
答案 2 :(得分:1)
像加布里埃尔说的那样,你应该指出你的问题。
当你谈到数组时,我想你会参考列表。 Python数组用于存储数值。
但是,您可以将队列转换为嵌套列表:#output list:
collectedData = list()
# # #
# for every thread, call:
threadBuffer = [item for item in q.queue]
collectedData.append(threadBuffer)
这将收集您可以轻松访问的嵌套列表中的数据,如下例所示:
l = list()
l.append([1,2,3,4,5])
l.append([6,7,8,9,0,11,22,33])
现在您可以自由访问: l [2] [2] - > 9
这对你有帮助吗?
致以最诚挚的问候,Christian
答案 3 :(得分:1)
我会选择以下解决方案:
from collections import deque
q = deque()
for i in range(5):
q.append([i,i+10])
listed_q = list(q)
现在,您可以通过索引或切片轻松访问值:
print listed_q[1] # [1, 11]
print listed_q[1][1] # 11
由于list()创建了q的副本,因此您应该密切关注队列的维度。队列越长,执行此操作所需的时间越长。可以使用itertools.islice找到另一种方法,在将结果存储到列表中之前,首先对队列进行切片。查看以下链接(还提供了性能指标):