码迷,mamicode.com
首页 > 编程语言 > 详细

python多线程读取同一个文件

时间:2015-05-13 21:49:59      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:python   多线程   读文件   

python多线程读取同一个文件

多线程读取同一个文件,要求不能重复,不能遗漏。


最开始尝试了一种方法(后来实践证明是无效的)

主线程分配给每个读线程需要读取文件中哪些行,

比如线程1读取1-10行,线程2读取11-30行。

然后每个线程通过readline()来读取,读到的行如果不属于本线程的范围,则continue跳过。

实践证明,这若干个线程并没有按照我们期望来读。

我的猜想是,通过open来打开一个文件,多个线程返回的是同一个句柄,

或者一个文件的文件指针只有一个。

 

经过网上搜索和实践,总结出有以下方法支持多线程读取同一个文件。

通过队列Queue来实现。主线程启动一个线程来读文件,把文件的内容放到队列里。

然后启动若干线程,全部从队列取数据。python中的Queue是线程安全的。

http://stackoverflow.com/questions/18781354/is-iterating-over-a-python-file-object-thread-safe

Is iterating over a Python file object thread safe?

 

通过linecache来实现。linecache可以指定行号来读取一个文件的任意一行。主线程先分配给每个读线程各自读取的行号,然后各线程根据行号用linecache来读取。

此种方法依赖于linecache读取任意一行的速度,如果是大文件,则比较慢。

比如线程1需要读取10-20行。假设线程1有自己的文件指针的话,读了地10行,可以直接很快定位到第11行。但是用linecache读取的话,每一次读取一行就没有什么关系了。当然,对于linecache怎么定位到任意一行,其中的原理我也没探究过。

 

3分文件读取。python先调用linux命令headtail,将一个文件分成若干个文件。然后每个读线程负责读取一个文件即可。


python多线程读取同一个文件

标签:python   多线程   读文件   

原文地址:http://blog.csdn.net/lingerlanlan/article/details/45699931

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!