博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python多线程读取文件
阅读量:6686 次
发布时间:2019-06-25

本文共 1823 字,大约阅读时间需要 6 分钟。

hot3.png

# -*- coding: utf-8 -*-import os,timeimport threadingrlock = threading.RLock()curPosition = 0class Reader(threading.Thread):    def __init__(self, res):        self.res = res        super(Reader, self).__init__()    def run(self):        global curPosition        fstream = open(self.res.fileName, 'r')        while True:            #锁定共享资源            rlock.acquire()            startPosition = curPosition            curPosition = endPosition = (startPosition + self.res.blockSize) if (startPosition + self.res.blockSize) < self.res.fileSize else self.res.fileSize            #释放共享资源            rlock.release()            if startPosition == self.res.fileSize:                break            elif startPosition != 0:                fstream.seek(startPosition)                fstream.readline()            pos = fstream.tell()            while pos < endPosition:                line = fstream.readline()                #处理line                #print(line.strip())                pos = fstream.tell()        fstream.close()class Resource(object):    def __init__(self, fileName):        self.fileName = fileName        #分块大小        self.blockSize = 100000000        self.getFileSize()    #计算文件大小    def getFileSize(self):        fstream = open(self.fileName, 'r')        fstream.seek(0, os.SEEK_END)        self.fileSize = fstream.tell()        fstream.close()if __name__ == '__main__':    starttime = time.clock()    #线程数    threadNum = 4    #文件    fileName = 'IPData.txt';    res = Resource(fileName)    threads = []    #初始化线程    for i in range(threadNum):        rdr = Reader(res)        threads.append(rdr)    #开始线程    for i in range(threadNum):        threads[i].start()    #结束线程    for i in range(threadNum):        threads[i].join()    print(time.clock() - starttime)

 

转载于:https://my.oschina.net/mickelfeng/blog/812361

你可能感兴趣的文章
插件 - 收藏集 - 掘金
查看>>
(转)详解spl_autoload_register()函数
查看>>
js 综合
查看>>
react开发教程(三)组件的构建
查看>>
express4.0源码解析
查看>>
func_get_args和func_num_args详解
查看>>
锚点偏移
查看>>
手把手教你webpack、react和node.js环境配置(上篇)
查看>>
Redis集群搭建与简单使用(四)
查看>>
scrapy 使用实例
查看>>
Laravel服务容器
查看>>
解读1.13.1 | 探究Docker Stack和可对接网络
查看>>
自动化部署打破混乱之墙 助力开发、运维、测试协同作战
查看>>
GitHub服务中断24小时11分钟事故分析报告\n
查看>>
华为敏捷DevOps实践:如何从Excel管理软件的方式中走出来
查看>>
安全狗:云时代的服务器安全守护者
查看>>
百度App网络深度优化系列(二):连接优化
查看>>
AWS发布Lambda@Edge,支持在CloudFront CND的边缘服务器上执行Node.js函数
查看>>
Eclipse基金会发布MicroProfile 2.2,适用于Java微服务
查看>>
NuGet已整合到MSBuild中
查看>>