У меня есть метод в моем коде 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, поэтому больших списков нет.
Я не знаю, где я теряю столько времени, и я ценю любую помощь.Спасибо!