linux学习(35):多线程读取文件

多线程读取文件:

# _*_coding:utf-8_*_
import time, threading, ConfigParser

‘‘‘
Reader类,继承threading.Thread
@__init__方法初始化
@run方法实现了读文件的操作
‘‘‘
class Reader(threading.Thread):
    def __init__(self, file_name, start_pos, end_pos):
        super(Reader, self).__init__()
        self.file_name = file_name
        self.start_pos = start_pos
        self.end_pos = end_pos

    def run(self):
        fd = open(self.file_name, ‘r‘)
        ‘‘‘
        该if块主要判断分块后的文件块的首位置是不是行首,
        是行首的话,不做处理
        否则,将文件块的首位置定位到下一行的行首
        ‘‘‘
        if self.start_pos != 0:
            fd.seek(self.start_pos-1)
            if fd.read(1) != ‘\n‘:
                line = fd.readline()
                self.start_pos = fd.tell()
        fd.seek(self.start_pos)
        ‘‘‘
        对该文件块进行处理
        ‘‘‘
        while (self.start_pos <= self.end_pos):
            line = fd.readline()
            ‘‘‘
            do somthing
            ‘‘‘
            self.start_pos = fd.tell()

‘‘‘
对文件进行分块,文件块的数量和线程数量一致
‘‘‘
class Partition(object):
    def __init__(self, file_name, thread_num):
        self.file_name = file_name
        self.block_num = thread_num

    def part(self):
        fd = open(self.file_name, ‘r‘)
        fd.seek(0, 2)
        pos_list = []
        file_size = fd.tell()
        block_size = file_size/self.block_num
        start_pos = 0
        for i in range(self.block_num):
            if i == self.block_num-1:
                end_pos = file_size-1
                pos_list.append((start_pos, end_pos))
                break
            end_pos = start_pos+block_size-1
            if end_pos >= file_size:
                end_pos = file_size-1
            if start_pos >= file_size:
                break
            pos_list.append((start_pos, end_pos))
            start_pos = end_pos+1
        fd.close()
        return pos_list

if __name__ == ‘__main__‘:
    ‘‘‘
    读取配置文件
    ‘‘‘
    config = ConfigParser.ConfigParser()
    config.readfp(open(‘conf.ini‘))
    #文件名
    file_name = config.get(‘info‘, ‘fileName‘)
    #线程数量
    thread_num = int(config.get(‘info‘, ‘threadNum‘))
    #起始时间
    start_time = time.clock()
    p = Partition(file_name, thread_num)
    t = []
    pos = p.part()
    #生成线程
    for i in range(thread_num):
        t.append(Reader(file_name, *pos[i]))
    #开启线程
    for i in range(thread_num):
        t[i].start()
    for i in range(thread_num):
        t[i].join()
    #结束时间
    end_time = time.clock()
    print "Cost time is %f" % (end_time - start_time)
时间: 2024-12-15 01:41:42

linux学习(35):多线程读取文件的相关文章

Linux学习命令汇总八——文件查找命令find选项及使用技巧

本章Blog相关Linux知识点 find与grep的不同点: find为文件搜索命令--用来在指定目录下查找文件,而grep 为文本搜索命令--根据用户指定的文本模式对目标文件进行逐步搜索,显示能够被匹配的行 : find选项支持文件通配符,而grep选线支持正则表达式  : find查找为精确查找,精确匹配但搜索速度稍慢. grep命令选项及正则表达式类型,详细请参考前文"Linux学习命令汇总三--Linux用户组管理,文件权限管理,文本搜索命令grep及正则表达式"   bas

14.swoole学习笔记--异步读取文件

<?php //异步读取文件 swoole_async_readfile(__DIR__."/1.txt",function($filename,$content){ echo "$filename $content"; }); ?> 原文地址:https://www.cnblogs.com/zouke1220/p/8442155.html

linux学习笔记——文件属性、文件权限及更改命令

#########################################################################################第六单元#########################################################################################################1.文件属性查看ls  -l  filename-         rw-rw-r--        

Linux学习笔记--locate命令(文件搜索命令)

locate,定位的意思,作用是让使用者可以快速的搜寻系统中是否有指定的文件. locate 命令特点: 1) "locate"的速度比"find"快,因为它并不是真的查找文件,而是查数据库. 2) 新建的文件,我们立即用"locate"命令去查找,一般是找不到的, 因为数据库的更新不是实时的,数据库的更新时间由系统维护. 3) "locate"命令所搜索的后台数据库在"/var/lib/mlocate"这

【linux学习笔记四】文件搜索命令

一 文件搜索 locate //在后台数据库中按文件名搜索 搜索速度更快 locate 文件名 //locate命令所搜索的后台数据库 /var/lib/mlocate //更新数据库 updatedb 二 命令搜索命令 whereis 与 which //搜索命令所在路径及帮助文档所在位置 whereis ls whereis -b 只查看可行性文件 whereis -m 只查找帮助文件 //除了所在位置 还可以查看文件别名 which 三 文件搜索 find //find [搜索范围] [搜

Linux学习私人笔记-压缩文件命令

常用的压缩命令有: .zip  .gz  .bz2  .tar.gz  .tar.bz2 .zip格式在linux和Windows中可以互用: zip 压缩文件名 原文件名 :压缩文件. zip -r  压缩目录名 原目录名 :压缩目录. unzip 压缩文件名 :解压文件/目录. gzip 原缩文件名 :压缩文件,文件格式自动为.gz格式,并且原文件消失. gzip -r 原目录名 :压缩目录,目录格式还是源格式,但目录中的文件都被压缩为.gz格式. gzip -d 压缩文件名 :解压文件.或

Linux学习笔记3_基本文件操作命令复习1

浏览类: ls         //浏览当前目录下内容(文件和目录)ls -l      //长格式浏览当前目录下内容(文件和目录),类似于windows的详细信息列表ls -d      //浏览当前目录(名称)ls -ld      //长格式浏览当前目录信息 路径类: cd       //返回用户主目录~(非根目录),或者:cd ~cd [dirName]  //切换至指定目录 mkdir       //创建目录rmdir       //删除空目录 文件类: touch      

linux学习笔记(二)之文件系统结构

一.目录结构 1.目录功能介绍 很多linux系统的发行版目录结构布局都遵循着FSSTND标准,这一标准的特点是根目录非常简洁,只包含系统最基本的文件,遵循这一标准,有利于程序的编写和移植,也便于系统管理和维护. (1)/etc目录 这个目录主要用于存放系统管理相关的配置文件以及子目录,其中比较重要的有系统初始化文件/etc/re,用户信息文件/etc/passwd等,相关网络配置文件和服务启动文件也均在这个目录下.详细信息如下: passwd 用户库文件,所有用户的用户名,UID,GID和工作

Linux学习之四——磁盘与文件系统管理

一.一些基本定义 1. superblock:记录此 filesystem 的整体信息,包括inode/block的总量.使用量.剩余量, 以及文件系统的格式与相关信息等:2. inode:记录档案的属性,一个档案占用一个inode,同时记录此档案的数据所在的block 号码:3. block:实际记录档案的内容,若档案太大时,会占用多个 block . 二.Linux支持的文件系统 1. 查看Linux 支持的文件系统有哪些: ls -l /lib/modules/$(uname -r)/ke