同步从队列中读取的python线程

时间:2016-10-26 23:39:44

标签: python-2.7 queue python-multithreading

我正在编写一个多线程应用程序,它以以下形式读取连接的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()?

0 个答案:

没有答案