Почему не работает memory_usage из memory_profiler Python?

Пытаюсь измерить потребляемую методом память. Этот метод - поиск подстроки в строке грубой силой.

from memory_profiler import memory_usage


def bruteforce(text, pattern):
    for i in range(len(text) - len(pattern) + 1):
        x = True
        for j in range(len(pattern)):
            if text[i + j] != pattern[j]:
                x = False
                break
        if x:
            return i


if __name__ == '__main__':
    mem_usage = memory_usage(bruteforce('AAAB', 'AB'))
    print('Memory usage (in chunks of .1 seconds): %s' % mem_usage)
    print('Maximum memory usage: %s' % max(mem_usage))

Но при запуске данного кода возникает ошибка: psutil.NoSuchProcess: psutil.NoSuchProcess no process found with pid 2. Не могу понять, что это значит.
Однако, если запускать код, который ниже, то все работает.

from memory_profiler import memory_usage
from time import sleep


def f():
    # a function that with growing
    # memory consumption
    a = [0] * 1000
    sleep(.1)
    b = a * 100
    sleep(.1)
    c = b * 100
    return a


if __name__ == '__main__':
    mem_usage = memory_usage(f())
    print('Memory usage (in chunks of .1 seconds): %s' % mem_usage)
    print('Maximum memory usage: %s' % max(mem_usage))


Ответы (2 шт):

Автор решения: GrAnd

Потому, что в документации сказано, что у этой функции есть 2 режима. В формате как вызываете вы она должна мониторить процесс. Ваша функция вернула 2, вот она и пытается найти процесс с id=2.

Чтобы работало с функцией надо передать ей кортеж вида (f, args, kw). Т.е. в вашем случае:

mem_usage = memory_usage((bruteforce, ('AAAB', 'AB'), {}))

После чего получим:

Memory usage (in chunks of .1 seconds): [19.3203125, 19.3203125, 19.3203125]
Maximum memory usage: 19.3203125
→ Ссылка
Автор решения: BlueScreen

В memory usage нужно передавать не результат работы функции, а ее саму.

def a():
   return 1
a # function at 0x....
a() # 1

Смотрим офф документацию тык и пишем

from memory_profiler import memory_usage
memory_usage((bruteforce , ('AAAB', 'AB'), {}))
→ Ссылка