Библиотека времени возвращает неправильное время выполнения функций декоратора в FlaskPython

Программы на Python
Anonymous
Библиотека времени возвращает неправильное время выполнения функций декоратора в Flask

Сообщение Anonymous »

Скажем, у меня есть следующие файлы Python в каталоге src для моего приложения Flask (точнее, Flask-smortest):

Код: Выделить всё

src/
ham.py
eggs.py
endpoint.py
имеет 1 функцию декоратора, а egg.py имеет 3 функции декоратора

Код: Выделить всё

#ham.py script

from functools import wraps
import time

def ham1(func):
@wraps(func)
def wrapper(*args, **kwargs):
start_time = time.monotonic()
i = func(*args, **kwargs)

time.sleep(2)

print(f'Execution time | ham1 -- {(time.monotonic() - start_time)} secs')

return True

return wrapper

Код: Выделить всё

#eggs.py script

from functools import wraps
import time

def egg1(func):
@wraps(func)
def wrapper(*args, **kwargs):
i = func(*args, **kwargs)
start_time = time.monotonic()

time.sleep(20)

print(f'Execution time | egg1 -- {(time.monotonic() - start_time)} secs')

return True
return wrapper

def egg2(func):
@wraps(func)
def wrapper(*args, **kwargs):
start_time = time.monotonic()
i = func(*args, **kwargs)

time.sleep(1)

return True
print(f'Execution time | egg2 -- {(time.monotonic() - start_time)} secs')

return wrapper

def egg3(func):
@wraps(func)
def wrapper(*args, **kwargs):
start_time = time.monotonic()
i = func(*args, **kwargs)

time.sleep(1)

print(f'Execution time | egg3 -- {(time.monotonic() - start_time)} secs')

return True
return wrapper

Код: Выделить всё

#endpoint.py script

from ham import ham1
from eggs import egg1, egg2, egg3

@egg3
@egg2
@egg1
@ham1
def foo():
return True
После выполнения foo() в моем приложении flask-smortest я получаю следующий результат:

Код: Выделить всё

Execution time | ham1 -- 2 secs
Execution time | egg1 -- 20 secs
Execution time | egg2 -- 21 secs
Execution time | egg3 -- 22 secs
В выходных данных отображается неверное время выполнения функций func egg2 и func egg3. Предполагается, что каждое из них должно составлять 1 секунду, но по какой-то причине оно суммирует время выполнения func egg1. Еще следует отметить, что func egg1 не накапливает время выполнения func ham1, которое находится в другом файле Python — ham.py . Такое поведение происходит только в функциях, существующих в одном файле Python - egg.py.
Я тоже пробовал time.perf_counter(), но все равно проблема. Я не понимаю, почему приложение ведет себя таким образом. Происходит ли какая-то асинхронная работа в фоновом режиме в flask?

Подробнее здесь: https://stackoverflow.com/questions/786 ... s-in-flask

Вернуться в «Python»