Ⅰ 用python處理一個1G左右的數據集,運行速度非常慢,怎樣優化
給你幾點個人的建議哈:
考慮拿C或C++重寫.
考慮並行搞,找個hadoop集群,寫成maprece程序跑 放在hadoop上跑,更多數據都不怕.
考慮升級機器,多搞點內存,然後東西盡量放在內存里搞.
考慮程序優化.
希望可以幫助到你哦,這只是我的一個建議哈!
Ⅱ 如何解決Python讀取pdf內容慢的問題
1,引言
晚上翻看《Python網路數據採集》這本書,看到讀取PDF內容的代碼,想起來前幾天集搜客剛剛發布了一個抓取網頁pdf內容的抓取規則
如果PDF文件在你的電腦里,那就把urlopen返回的對象pdfFile替換成普通的open()文件對象。
3,展望
這個實驗只是把pdf轉換成了文本,但是沒有像開頭所說的轉換成html標簽,那麼在Python編程環境下是否有這個能力,留待今後探索。
4,集搜客GooSeeker開源代碼下載源
1.GooSeeker開源Python網路爬蟲GitHub源
5,文檔修改歷史
2016-05-26:V2.0,增補文字說明
2016-05-29:V2.1,增加第六章:源代碼下載源,並更換github源的網址
Ⅲ 使用python編程處理大量數據,效率太慢怎麼解決
既然存有上千萬個數據,為什麼不使用資料庫呢?
使用小型的sqlite資料庫,加上適當的索引、篩選,肯定能大大提高數據處理速度。
python也自身帶有處理sqlite資料庫的模塊,極其方便。
Ⅳ 用python編程讀取TXT時,數據大概有1千萬條,速度很慢如何解決
兩種可選的方式
1:使用yield的懶惰載入,示例代碼如下:
123456789101112
def read_in_chunks(file_object, chunk_size=1024): """Lazy function (generator) to read a file piece by piece. Default chunk size: 1k.""" while True: data = file_object.read(chunk_size) if not data: break yield data f = open('really_big_file.dat')for piece in read_in_chunks(f): process_data(piece)
2:使用iter和一個幫助方法:
123456
f = open('really_big_file.dat')def read1k(): return f.read(1024) for piece in iter(read1k, ''): process_data(piece)
推薦使用第一個。
Ⅳ python 處理大數據程序運行的越來越慢的問題
最近編寫並運行了一個處理1500萬個數據的程序,本來最初每秒可以處理150個左右的數據,預計大概15個小時的時間就可以處理完,晚上的時候就開始運行,本以為等到第二天中午就可以得到結果呢,,,
可是,等我第二天的時候一看,什麼???還沒處理完,當前的數據處理速度變成了一秒5個左右,然後還需要等待300個小時。
然後就查了一下這個問題,原來同樣也有很多人在處理大數據的時候遇到了這個問題,大多數的文章分析的原因都是說由於GC(垃圾回收)造成的性能下降。
Python的垃圾回收機制的工作原理為每個對象維護一個引用計數,每次內存對象的創建與銷毀都必須修改引用計數,從而在大量的對象創建時,需要大量的執行修改引用計數操作,對於程序執行過程中,額外的性能開銷是令人可怕的。回收的觸發時機有兩種可能,一是用戶主動調用gc.collect(),二是對象數量超過閾值。
所以正是GC拖慢了程序的性能,所以我們可以考慮在處理的時候禁止垃圾回收。
通過這樣的改進之後速度確度會有很大的提升。但是又有也會另外的一個問題,內存溢出,由於運行的過程中生成大量的對象,一次使用後就沒有了引用,由於關閉了垃圾回收機制,一直存在內存中得不到清理,然後程序的內存使用量越來越大。解決的方法就是定期打開gc.enable()再關閉或者主動調用gc.collect(),這樣就可以了。
通過上述的改進後程序確實了很多,可是我的程序還是運行的越來越慢,我都懷疑人生了,然後分別測試了各個步驟所花費的時間才知道了原因,我使用了pandas創建一個DataFrame,然後每次迭代得到的結果都添加新的數據到DataFrame中,隨著里邊的數據越來越多,添加的速度也就越來越慢了,嚴重的拖累的運行速度。這里的解決方法有兩個:
1 分段保存結果,間隔一段時間就保存一次結果,最後再將多次的結果合並。
2 換一個數據存儲方法,我是直接使用了python的字典進行保存結果,它隨著數據的增多添加的速度也會變慢,但是差別不是很大,在可接受的范圍內,可以使用;或者再加上方法1,分段進行保存再合並也是可以的。
Ⅵ python在一個循環中處理數據,越來越慢,求教
要麼開多線程,要麼用C/C++或python數組的語法特徵處理循環,沒代碼沒法判斷,要是用原生的python代碼處理循環當然慢。