热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python多线程与单线程处理大文件的性能差异【附图】

今天写了一段Python多线程处理文件的代码,用以比较单线程和多线程在处理较大文件时的速度差异代码解释:1-3行:导入需要用到的模块os,

今天写了一段Python多线程处理文件的代码,用以比较单线程和多线程在处理较大文件时的速度差异

代码解释:

1-3行:导入需要用到的模块os,threading,ctime

4-11行:从列表list中取得文件名,并计算出该文件的行数

15-22行:取得当前工作路径下的所有文件,并从中筛选出txt文件

28-33行:创建线程

34-35行:调用start()函数,一起启动线程:同步性

注意:在读取文件的时候,我没有使用read分批读入,而是使用readlines,所有运行的时候,可能会比较卡,读者也可以修改下代码的第9行

单线程和多线程处理较大文件的速度对比:

每个文本文件的行数大约都在100万行左右,通过以上的对比,我们从中就能很明显的发现多线程处理大文件的优势所在

代码如下:

1 import os
2 import threading
3 from time import ctime
4 def loop(loops,list):#list存放着每个线程需要处理的文本文件名
5 print '线程%d处理的文件列表%s\n'%(loops+1,list)
6 list_len=len(list)
7 for i in range(list_len):
8 f=open(list[i])
9 rows=len(f.readlines())#此处,我直接将整个文件读入,所以会比较卡,可以在此设置每次读入的大小
10 f.close()
11 print '文件%s__%d行\n'%(list[i],rows)
12
13 def main():
14 print 'all start at:',ctime()
15 cwd=os.getcwd()
16 dir_list=os.listdir(cwd)
17 file_list=[] #该列表用来存放当前目录下的所有txt文件
18 print '当前文件夹下的所有txt文件:'
19 for l in dir_list:
20 if l.rfind('txt')>=0:
21 print ' ',l
22 file_list.append(l)
23 threads=[]
24 threads_num=4 #线程数 在此处修改下线程数就可以比较多线程与单线程处理文件的速度差异
25 print '共有线程数:%d个'%threads_num
26 per_thread=len(file_list)/threads_num #每个线程处理的文本数量
27 print per_thread
28 for i in range(threads_num):
29 if threads_num-i==1: #最后一个线程,分担余下的所有工作量
30 t=threading.Thread(target=loop,args=(i,file_list[i*per_thread:]))
31 else:
32 t=threading.Thread(target=loop,args=(i,file_list[i*per_thread:i*per_thread+per_thread]))
33 threads.append(t)
34 for i in range(threads_num):
35 threads[i].start()
36 for i in range(threads_num):#等待所有的线程结束
37 threads[i].join()
38 print 'all end at:',ctime()
39 if __name__=='__main__':
40 main()


原创文章:WEB开发_小飞

转载请注明出处:http://www.cnblogs.com/hongfei/archive/2012/04/14/python-multithread-document.html


推荐阅读
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 本文介绍了Python对Excel文件的读取方法,包括模块的安装和使用。通过安装xlrd、xlwt、xlutils、pyExcelerator等模块,可以实现对Excel文件的读取和处理。具体的读取方法包括打开excel文件、抓取所有sheet的名称、定位到指定的表单等。本文提供了两种定位表单的方式,并给出了相应的代码示例。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
  • C#多线程解决界面卡死问题的完美解决方案
    当界面需要在程序运行中不断更新数据时,使用多线程可以解决界面卡死的问题。一个主线程创建界面,使用一个子线程执行程序并更新主界面,可以避免卡死现象。本文分享了一个例子,供大家参考。 ... [详细]
  • 文件路径的生成及其在文件操作中的应用
    本文介绍了文件路径的生成方法及其在文件操作中的应用。在进行文件操作时,需要知道文件的具体位置才能打开文件。文件的位置有绝对路径和相对路径之分。绝对路径通常只在特定电脑上有效,不同电脑上的文件存放路径可能不同,导致程序报错。相对路径是解决这个问题的最好方式,它不依赖于文件的具体存放位置,只需要按照统一的规范进行文件存放即可。使用相对路径可以避免冗余和麻烦,特别适用于大项目和团队维护代码的情况。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • 1Lock与ReadWriteLock1.1LockpublicinterfaceLock{voidlock();voidlockInterruptibl ... [详细]
  • Python教学练习二Python1-12练习二一、判断季节用户输入月份,判断这个月是哪个季节?3,4,5月----春 ... [详细]
author-avatar
袁冠和堂
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有