У меня есть большое количество разных графиков (каждый 8000+ узлов). В igraph (версия 0.7.0) для python 2.7 я пытаюсь выполнить некоторые вычисления на кратчайших путях, рассчитанных на этих графиках. В цикле каждый граф импортируется в igraph, а затем вычисляются кратчайшие пути. Однако я заметил, что память, используемая python, увеличивается во время каждого цикла (хотя новые графики используются в каждом цикле). Через некоторое время моя программа вылетает из-за заполнения памяти. Это указывает на утечку памяти в igraph? Как я могу лучше всего решить эту проблему? (?)igraph для python: утечка памяти (?) В get_shortest_paths
Этой утечка памяти может быть продемонстрирована с кодом питона ниже:
import igraph as ig
import psutil, os
# Perform the operation below 100 times.
for run in range(100):
mygraph = ig.Graph.Full(300)
# To speed up calculations only the nodes that can be reached in 10 steps are considered for the shortest paths
ig10neigh = mygraph.neighborhood(order = 10, mode = 'out')
for v in range(mygraph.vcount()):
paths = mygraph.get_shortest_paths(v, ig10neigh[v], mode = 'out', output = 'epath')
#Here some calculations with the paths
print psutil.Process(os.getpid()).get_memory_info()[0]/float(2 ** 20) # Print the memory use
Когда я запускаю приведенный выше код моего использование памяти медленно увеличивается с от 22 МБ до 100 МБ.
Благодарим за помощь!
спасибо, что исправил эту утечку. К сожалению, я не сейчас, как скомпилировать igraph с нуля, поэтому мне придется ждать следующего релиза. Можно ли передать мой график в подпроцесс и запустить 'for v in range (mygrapp.vcount()):' loop в подпроцессе? Таким образом, память должна быть освобождена каждый раз, когда цикл завершен. –