Python多線程與單線程處理大檔案的效能差異【附圖】

來源:互聯網
上載者:User

今天寫了一段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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.