2017-02-05 9 views
0

У меня есть программа, которая анализирует файл 100MB, затем я применяю некоторые функции к данным. Я не выполнил функции для проверки узких мест ...Python - как определить, связан ли процесс с i/o?

Так что я просто кладу реализацию в комментарии и просто поставить pass

Почему Питон использует так много памяти?

Требуется 15 минут для анализа файла, и я вижу, что python использует 3 ГБ памяти, процессор работает на 15%, а память - на 70%.

Применяется ли программа, связанная с io?

Как я могу закрепить разбор? Или нет ничего против медленного разбора?

образец файла: Возраст и зарплата

50 1000 
40 123 
1233 123213 

КОД:

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

В зависимости от того, что вы пытаетесь сделать это, вам может быть полезно использовать что-то вроде 'np.loadtxt' numpy' для быстрого чтения файла. – 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

 Смежные вопросы

  • Нет связанных вопросов^_^