Почему guppy3 и memory_profiler так сильно отличаются?

#python #multiprocessing #python-multiprocessing #memory-profiling #guppy

Вопрос:

Я использовал как memory_profiler, так и guppy3 для профилирования использования памяти моей программой на python, но получил совершенно разные результаты. Мои эксперименты сосредоточены на многопроцессорной обработке, поэтому позвольте мне показать вам простой пример:

Допустим, у нас есть список: l = [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10), (2, 3), (4, 5), (6, 7), (8, 9)] и функция:

 def f(x):
  time.sleep(1)
  x1 = x   1
  if x1 > 5:
      return x1
 

и еще одна функция для многопроцессорной обработки:

 def myfunc():
  p = Pool(4)
  a = [x for (x, y) in l]

  p.map_async(f, a)
  p.close()
  p.join()
 

Однако результат guppy3 показывает что-то вроде этого:

Использование Памяти После Создания Объектов : 0,3077840805053711 МБ

И memory_profiler показывает примерно следующее: общий график mprof

Есть идеи? И есть ли у вас какие-либо рекомендации по профилированию использования многопроцессорной памяти в python?