我正在编写一个多线程应用程序,它以以下形式读取连接的CSV文件:
HEADER1,HEADER2,HEADER3,HEADER4
value1,value2,value3,value4
value1,value2,value3,value4
HEADER1,HEADER2,HEADER3
value1,value2,value3
HEADER1,HEADER2,HEADER3,HEADER4,HEADER5,HEADER6
value1,value2,value3,value4,value5,value6
有多个工作线程将通过队列接收'value'行。每个线程都会执行q.get()来获取一行并进行处理。
主线程将读取将“值”行放入工作队列的数据。当遇到HEADER时,它必须等到所有工作线程都处理完当前队列中的所有数据,然后处理HEADER并且工作人员可以继续使用新格式的数据。
代码类似于:
rowqueue=Queue.Queue()
def value_worker():
while True:
rowqueue.get()
# process the row using the previous header information.
# This could take some time
for w in range(5):
v=threading.Thread(target=value_worker)
v.start()
reader=csv.reader(open('DATA.csv', 'r'))
for row in reader:
if row[0]!='HEADER1':
rowqueue.put(row)
else:
### Wait for queue to be emptied and all workers must be
### finished with their last row of data
while True:
if rowqueue.empty(): break
### current implementation may have worker empty last row
### but still working on it...need to wait for that last
### worker
Process_HEADER()
问题是,如何知道所有工作人员都已完成最后一行(并在开始处理标题之前返回rowqueue.get()?