導航:首頁 > 編程語言 > python等一段時間再執行

python等一段時間再執行

發布時間:2024-06-26 22:21:31

python 處理大數據程序運行的越來越慢的問題

最近編寫並運行了一個處理1500萬個數據的程序,本來最初每秒可以處理150個左右的數據,預計大概15個小時的時間就可以處理完,晚上的時候就開始運行,本以為等到第二天中午就可以得到結果呢,,,

可是,等我第二天的時候一看,什麼???還沒處理完,當前的數據處理速度變成了一秒5個左右,然後還需要等待300個小時。

然後就查了一下這個問題,原來同樣也有很多人在處理大數據的時候遇到了這個問題,大多數的文章分析的原因都是說由於GC(垃圾回收)造成的性能下降。
Python的垃圾回收機制的工作原理為每個對象維護一個引用計數,每次內存對象的創建與銷毀都必須修改引用計數,從而在大量的對象創建時,需要大量的執行修改引用計數操作,對於程序執行過程中,額外的性能開銷是令人可怕的。回收的觸發時機有兩種可能,一是用戶主動調用gc.collect(),二是對象數量超過閾值。

所以正是GC拖慢了程序的性能,所以我們可以考慮在處理的時候禁止垃圾回收。

通過這樣的改進之後速度確度會有很大的提升。但是又有也會另外的一個問題,內存溢出,由於運行的過程中生成大量的對象,一次使用後就沒有了引用,由於關閉了垃圾回收機制,一直存在內存中得不到清理,然後程序的內存使用量越來越大。解決的方法就是定期打開gc.enable()再關閉或者主動調用gc.collect(),這樣就可以了。

通過上述的改進後程序確實了很多,可是我的程序還是運行的越來越慢,我都懷疑人生了,然後分別測試了各個步驟所花費的時間才知道了原因,我使用了pandas創建一個DataFrame,然後每次迭代得到的結果都添加新的數據到DataFrame中,隨著里邊的數據越來越多,添加的速度也就越來越慢了,嚴重的拖累的運行速度。這里的解決方法有兩個:

1 分段保存結果,間隔一段時間就保存一次結果,最後再將多次的結果合並。

2 換一個數據存儲方法,我是直接使用了python的字典進行保存結果,它隨著數據的增多添加的速度也會變慢,但是差別不是很大,在可接受的范圍內,可以使用;或者再加上方法1,分段進行保存再合並也是可以的。

② 如何讓python程序每個一段時間執行一次

def func_new(self):
self.timerNew = threading.Timer(1, self.func_new)//每隔1秒運行

③ python多線程為什麼會暫停一下,再接著跑 跑一段時間,會暫停幾秒鍾,然後接著列印。

線程之間的輸出,需要在池中中轉,死循環的時間長了,出現滿棧的概率提高,外在表現就是卡一會兒

④ Python寫每隔一段時間就運行一次的任務,怎麼寫比較好

#coding=utf-8
#usingpython2.7
importtime
start_job=True
whilestart_job:
#dosomethinghere.
print1#這里改成你想做的任務
time.sleep(60)#每隔一分鍾執行一次print任務,sleep里的參數按秒算

閱讀全文

與python等一段時間再執行相關的資料

熱點內容
解壓音樂排名 瀏覽:383
安卓手機瀏覽器怎麼掃二維碼 瀏覽:715
通達信成本均線源碼 瀏覽:614
可以下載的解壓音頻 瀏覽:564
海賊王怎麼換伺服器 瀏覽:318
計算機上的共享文件夾映射 瀏覽:940
榮耀安裝包在文件夾哪裡 瀏覽:195
機票php源碼 瀏覽:231
linux共享mac 瀏覽:922
中國沒有國外的伺服器地址 瀏覽:759
為什麼退款伺服器連接錯誤 瀏覽:557
android簡訊存儲位置 瀏覽:972
unix網路編程卷4 瀏覽:808
找靚機app下單什麼時候發貨 瀏覽:413
android一個應用兩個進程 瀏覽:803
linux硬碟復制 瀏覽:808
php圖片伺服器搭建 瀏覽:801
下載壓縮文件怎麼打開 瀏覽:194
新建文件夾叫什麼名字 瀏覽:567
windows20的開機命令 瀏覽:335