Проблемы с производительностью в python for loop - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть метод в моем коде Python, который занимает около 70% времени всей моей программы.По этой причине я пытаюсь улучшить его.

Метод построен следующим образом:

def foo(self, objs, compare_value):     # takes 4.07 seconds

    objs_to_run = [False for x in range(len(objs))]     # takes 0.03 seconds
    index = 0
    for station, value  in self.stations[:]:
        if len(objs) == index:
            break   

        else:
            if compare_value >= value:
                if station.is_runnable(compare_value) is not None:      # takes 2.37 seconds
                    objs[index].add_station(station)        # takes 0.02 seconds
                    objs_to_run[index] = True
                    index += 1
                    self.stations.remove((station, time))   # takes 0.03 seconds

    return cores_to_execute 

station в этом примере - это класс, который определяет метод is_runnable().Возвращает None или задание для запуска.

Если я добавлю единственные отмеченные значения, я получу около 2.45 seconds, где для всего моего метода требуется 4.07 seconds.Это всего лишь 60%, и я пытаюсь выяснить, куда ушло остальное время.

Время измеряется с помощью pycallgraph и представляет собой накопленные значения для ~ 7000 вызовов метода.
Чтобы понять размеры, с которыми я имею дело, objs - это либо длина 1, либо 2, а длина self.stations - около 20, поэтому больших списков нет.

Я не знаю, где я теряю столько времени, и я ценю любую помощь.Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...