python多线程处理文件_python中的线程并发处理多个大文件

我是python新手,在理解线程的工作原理时遇到了困难。通过浏览文档,我的理解是在线程上调用join()是建议的阻塞方法,直到它完成。在

为了提供一些背景知识,我有48个大的csv文件(多GB),我正试图解析这些文件,以便找到不一致之处。线程没有共享状态。这可以在一个合理的时间内一次性完成,但我试图同时作为一个练习。在

以下是文件处理的框架:def process_file(data_file):

with open(data_file) as f:

print "Start processing {0}".format(data_file)

line = f.readline()

while line:

# logic omitted for brevity; can post if required

# pretty certain it works as expected, single 'thread' works fine

line = f.readline()

print "Finished processing file {0} with {1} errors".format(data_file, error_count)

def process_file_callable(data_file):

try:

process_file(data_file)

except:

print >> sys.stderr, "Error processing file {0}".format(data_file)

以及并发位:

^{pr2}$

我把它当作:python -u datautils/cleaner.py > cleaner.out 2> cleaner.err

我的理解是join()应该阻止调用它的线程等待被调用的线程完成,但是我观察到的行为与我的预期不符。在

我从未在错误文件中看到错误,但也从未在stdout上看到预期的日志消息。在

父进程不会终止,除非我从shell中显式地终止它。如果我检查一下我有多少张照片,Finished ...它永远不是预期的48张,而是在12到15张之间。但是,在单线程运行之后,我可以确认多线程运行实际上正在处理所有事情并执行所有预期的验证,只是它似乎没有干净地终止。在

我知道我一定是做错了什么,但如果你能给我指出正确的方向,我将不胜感激。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值