2017-02-05 57 views
0

我有一個解析100MB文件的程序,然後我在數據上應用了一些函數。我沒有實現的功能檢查的瓶頸......Python - 如何判斷一個進程是否受I/O限制?

所以我只是把我的實施意見,只是把pass

爲什麼用這麼多的內存蟒蛇?

解析文件需要15分鐘,我可以看到python使用3GB內存,CPU使用率爲15%,內存使用率爲70%。

它適用於io綁定的程序嗎?

我該如何解析解析?或者是沒有什麼可以解決緩慢的解析?

文件樣本: 年齡和薪水

50 1000 
40 123 
1233 123213 

CODE:你觀察

def parse(pathToFile): 
    myList = [] 
    with open(pathToFile) as f: 
     for line in f: 
      s = line.split() 
      age, salary = [int(v) for v in s] 
      Jemand = Mensch(age, salary) 
      myList.append(Jemand) 
    return myList 
+0

取決於你正試圖做,你可能會更好地使用'numpy'的'np.loadtxt'來快速讀取文件。 – VBB

回答

2

你的代碼可以用於速度提高了很多:

with open(pathToFile) as f: 
    for line in f: 
     s = line.split() 
     age, salary = [int(v) for v in s] 
     Jemand = Mensch(age, salary) 
     myList.append(Jemand) 

是緩慢的,因爲

  • 循環
  • append
  • 無用名單comp轉換爲整數,分配給固定數量的值

它可能成爲一個準一個班輪:

with open(pathToFile) as f: 
    myList = [Mensch(*(int(x) for x in line.split())) for line in f] 

(使用列表鏈接列表理解&發電機的理解,儘量用*拆包傳遞參數給類)

+0

謝謝,但現在我需要在列表中創建一個新對象。 'newObj =(Jemand,2);' 如何將此添加到您的一個commnad? –

+0

我編輯我的問題,如果你能幫助,我將不勝感激。 –

+0

首先你改變了你的問題,然後你創建了一個你不存儲的「Rate」變量......並且最後再提出另一個問題。 –

0

業績不佳可以通過Python的垃圾收集器中的錯誤引起的。要解決此問題,請在構建列表時禁用垃圾回收,並在完成後將其打開。欲瞭解更多詳情,請參見this SO article

相關問題