看板 Python 關於我們 聯絡資訊
我最近寫了一支文件處理的小程式 主要的內容大略是從一個固定格式的檔案中讀取幾萬筆數據轉成圖片 在處理單一檔案的時候不會有什麼問題 但是當我把程式包裝成class,再批次呼叫class來處理大約數千個檔案的時候 就會看到每一筆的處理速度愈來愈慢 批次處理的方式很簡單,大致如下: class foo() def __init__(): def blah(): if __name__ == "__init__": for file in dir: d = foo(file) d.blah() 我試過加上d = None,希望能夠促使python作資源回收,不過也沒什麼用。 最後我是用bash來做這一段,似乎有點蠢,不知道有沒有更好的方法。 謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.137.234.128
ya790206:用multiprocess呢? 你應該不需要等某件事做完才做某件事 11/20 00:11
carlcarl:你應該觀察一下慢是怎麼個慢法 是記憶體愈吃愈多嗎? 11/20 04:39
hl4:記憶體的使用數量沒有持續增加,大多還是未使用的狀態 11/20 10:16
hl4:每一筆的處理時間遞增太快,所以還沒打算用multiprocess 11/20 10:20
swpoker:變成圖檔是否卡在IO? 11/20 10:46
hl4:圖檔生成卡IO應該是每筆處理都卡,平均拖慢每筆處理的時間吧? 11/20 10:51
hl4:我的圖檔生成是在d.blah()做的 11/20 10:59
swpoker:存取資料的方式卡住嗎?例如第一個檔案新增N萬筆資料 11/20 12:29
swpoker:第二個檔案又新增數萬筆資料~因此造成後續的處理成倍數 11/20 12:30
每一份檔案的處理都是重新來過,所以不應該有這樣的問題。 我稍微修改說明,希望有描述的清楚一些。 ※ 編輯: hl4 來自: 140.116.39.124 (11/20 13:49) ※ 編輯: hl4 來自: 140.116.39.124 (11/20 13:50)
darkgerm:用 python -m cProfile yourfile.py 試試瓶頸在哪? 11/20 14:05
swpoker:os.system(你的py)~~如果效能符合預期~就是class出問題啦 11/21 11:28