python多线程读取同一个文件
2015-05-13 21:36
106 查看
python多线程读取同一个文件
多线程读取同一个文件,要求不能重复,不能遗漏。
最开始尝试了一种方法(后来实践证明是无效的)
主线程分配给每个读线程需要读取文件中哪些行,
比如线程1读取1-10行,线程2读取11-30行。
然后每个线程通过readline()来读取,读到的行如果不属于本线程的范围,则continue跳过。
实践证明,这若干个线程并没有按照我们期望来读。
我的猜想是,通过open来打开一个文件,多个线程返回的是同一个句柄,
或者一个文件的文件指针只有一个。
经过网上搜索和实践,总结出有以下方法支持多线程读取同一个文件。
1 通过队列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?
2 通过linecache来实现。linecache可以指定行号来读取一个文件的任意一行。主线程先分配给每个读线程各自读取的行号,然后各线程根据行号用linecache来读取。
此种方法依赖于linecache读取任意一行的速度,如果是大文件,则比较慢。
比如线程1需要读取10-20行。假设线程1有自己的文件指针的话,读了地10行,可以直接很快定位到第11行。但是用linecache读取的话,每一次读取一行就没有什么关系了。当然,对于linecache怎么定位到任意一行,其中的原理我也没探究过。
3分文件读取。python先调用linux命令head和tail,将一个文件分成若干个文件。然后每个读线程负责读取一个文件即可。
多线程读取同一个文件,要求不能重复,不能遗漏。
最开始尝试了一种方法(后来实践证明是无效的)
主线程分配给每个读线程需要读取文件中哪些行,
比如线程1读取1-10行,线程2读取11-30行。
然后每个线程通过readline()来读取,读到的行如果不属于本线程的范围,则continue跳过。
实践证明,这若干个线程并没有按照我们期望来读。
我的猜想是,通过open来打开一个文件,多个线程返回的是同一个句柄,
或者一个文件的文件指针只有一个。
经过网上搜索和实践,总结出有以下方法支持多线程读取同一个文件。
1 通过队列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?
2 通过linecache来实现。linecache可以指定行号来读取一个文件的任意一行。主线程先分配给每个读线程各自读取的行号,然后各线程根据行号用linecache来读取。
此种方法依赖于linecache读取任意一行的速度,如果是大文件,则比较慢。
比如线程1需要读取10-20行。假设线程1有自己的文件指针的话,读了地10行,可以直接很快定位到第11行。但是用linecache读取的话,每一次读取一行就没有什么关系了。当然,对于linecache怎么定位到任意一行,其中的原理我也没探究过。
3分文件读取。python先调用linux命令head和tail,将一个文件分成若干个文件。然后每个读线程负责读取一个文件即可。
相关文章推荐
- python(35):多线程读取文件
- Python读取一个目录下的目录及文件数
- Python读取文件中一串字符串并且把其中所有的数字组成一个新的字符串,并且打印出来
- JAVA多线程读取同一个文件,加速对文件内容的获取
- 002_010 Python 处理字符串中的Zip文件 你的程序收到了一个字符串,内容是一个ZIP文件,需要读取zip文件的信息
- python读取TXT文件并逐行写入另外一个TXT文件
- JAVA多线程读取同一个文件,加速对文件内容的获取
- Python 读取键盘输入字符,多线程操作,文件操作随机处理 开发范例
- python读取一个目录下的文件,并且写入.txt文件中
- python读取csv文件并把文件放入一个list中脚本实例
- 002_009 Python 从Zip中读取数据 直接检查一个zip格式的归档文件部分或所有文件而且不用解压
- python读取csv文件并把文件放入一个list中脚本实例
- python 从两个配置文件读取数据,形成一个url思路代码
- Python读取一个目录下所有目录和文件的方法
- python读取csv文件并把文件放入一个list中脚本实例
- Python读取一个目录下所有目录和文件的方法
- python 读取一个目录下的所有目录和文件
- python实现读取大文件并逐行写入另外一个文件
- Python 读取文件替换其中的内容并输出到一个新的文件内
- 【Python】读取一个目录,将文件名称转换成 json 格式