Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Python - как определить, связан ли процесс с вводом-выводом?

Автор вопроса: Hertha BSC fanОтветов: 2

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

Поэтому я просто поместил свою реализацию в комментарий и просто поставил pass

ПОЧЕМУ python использует так много памяти?

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

pythonparsingio

Ответы

Ответ 1 · рейтинг 2 · Jean-François Fabre

ваш код может быть значительно улучшен для скорости:

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]

(используя понимание спискового списка и понимание генератора, вплоть до передачи параметров в класс с распаковкой *)

Ответ 2 · ivan_onys

Наблюдаемая вами низкая производительность может быть вызвана ошибкой в ​​сборщике мусора Python. Чтобы решить эту проблему, отключите сборку мусора при построении списка и включите ее после завершения. Для получения дополнительной информации см. эту статью SO

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы