今天寫了一段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 ' ',l22 file_list.append(l)23 threads=[]24 threads_num=4 #線程數 在此處修改下線程數就可以比較多線程與單線程處理檔案的速度差異25 print '共有線程數:%d個'%threads_num26 per_thread=len(file_list)/threads_num #每個線程處理的文本數量27 print per_thread28 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