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

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

代码解释:

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

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

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

28-33行:创建线程

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

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

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

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

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

每个文本文件的行数大约都在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多线程与单线程处理大文件的性能差异【附图】)