CSV 行数中断 ThreadPool

CSV rowcount breaks ThreadPool

我在 Python 2.7 中遇到 CSV 和线程池的一个很奇怪的问题 每当我尝试计算 CSV 中的行数时,我的线程都不会启动。取消注释代码可以正常工作。

import csv
from multiprocessing.pool import ThreadPool

ifile = open('unzipped/49619.txt', "rb")
reader = csv.reader(ifile, delimiter='|')



#totalrows = sum(1 for row in csv.reader(ifile, delimiter='|'))
totalrows = 111907
print totalrows

def test(args):
    print 'Yes!'

pool = ThreadPool(processes=500)
job_args = [(totalrows, i) for i, row in enumerate(reader)]
pool.map(test, job_args)

注释行的计数结果和下面的数量一样,111907,连类型都一样

这是某种奇怪的错误还是出了什么问题?

在您的注释行中,您正在迭代 reader,这将消耗您的输入文件。你用两个不同的reader也没关系,文件的读取位置都会在最后。

一种解决方案是在第二次迭代之前调用 ifile.seek(0) 倒回输入文件。