如何使用元组设置变量以传递到线程队列
ml =[('A', '2011-04', '2011-05'), ('b', '2011-07', '2011-04', '2011-05'), ('c', '2011-06', '2011-07', '2011-04', '2011-05')]
以下是排队设置:
# build a queue with tuples
queue = Queue.Queue()
for row in ml:
if not row or row[0] == "#":
continue
qSplit = row.split()
queue.put((qSplit[0], qSplit[1], qSplit[2],qSplit[3] ))
在这里更新一些代码:
import sys, threading, Queue
ml = [('a', '2011-04', '2011-05'), ('b', '2011-07', '2011-04', '2011-05'), ('c', '2011-06', '2011-07', '2011-04', '2011-05')]
class WorkerThread(threading.Thread):
def __init__(self, queue):
threading.Thread.__init__(self)
self.queue = queue
def run(self):
while 1:
try: # take a job from the queue
id, null, null2, null3 = self.queue.get_nowait()
except Queue.Empty:
raise SystemExit
if __name__ == '__main__':
connections = 5
# build a queue with tuples
queue = Queue.Queue()
for row in ml:
if not row or row[0] == "#":
continue
queue.put(row[:3])
# print queue
threads = []
for dummy in range(connections):
t = WorkerThread(queue)
t.start()
threads.append(t)
# wait for all threads to finish
for thread in threads:
thread.join()
sys.stdout.write("\n")
sys.stdout.flush()
答案 0 :(得分:1)
我不确定我是否理解这个问题。
qSplit = row.split()
不起作用,因为row
是元组,而不是字符串。但似乎你所要做的就是将元组分成它的组件,只是将它们组合成一个新的元组。这对我没有意义。
您在for
循环中也没有做任何事情。
这个怎么样:
for row in ml:
if not row or row[0] == "#":
continue
queue.put(row)
无需拆分任何东西......
答案 1 :(得分:1)
如果您唯一的问题是您只想要每个元组的前几个元素(我不太确定您想要什么),那么您可以使用切片表示法来删除多余的元素。这也可以防止row[3]
对于少于四个元素的行产生的IndexError。
for row in ml:
if not row or row[0]== "#":
continue
queue.put(row[:4])
答案 2 :(得分:0)
# build a queue with tuples
queue = Queue.Queue()
for row in ml:
if not row or row[0] == "#":
continue
for item in row[:4]:
q.put(item)