Pydantic 2.6.4 validate_call против isinstancePython

Программы на Python
Anonymous
Pydantic 2.6.4 validate_call против isinstance

Сообщение Anonymous »

Как следует из названия, я тестировал производительность проверки декоратора pydantic (vers=2.6.4) @validate_call по сравнению с простым вызовом isinstance().
Вот код >

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

from pydantic import BaseModel, validate_call, ConfigDict

# Class with pydantic method validation
class User1(BaseModel):
value:int

@staticmethod
@validate_call(config=ConfigDict(strict=True))
def add(x:int, y:int) -> int:
return x + y

# Class with "handmade" type validation
class User2(BaseModel):
value:int

@staticmethod
def add(x:int, y:int) -> int:
if not isinstance(x,int):
raise TypeError('wrong x')
if not isinstance(y,int):
raise TypeError('wrong y')
return x + y

user1 = User1(value=10)
user2 = User2(value=10)
Здесь производительность вызывает метод .add()

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

%%timeit
user1.add(1,1)
554 нс ± 2,83 нс на цикл (среднее ± стандартное отклонение для 7 циклов по 1 000 000 циклов каждый)

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

%%timeit
user2.add(1,1)
74,3 нс ± 4,61 нс на цикл (среднее ± стандартное отклонение для 7 прогонов, по 10 000 000 циклов каждый)
Оба класса являются классами pydantic BaseModel . А в User1 я использовал config = ConfigDict...строгую проверку в надежде на лучшую производительность (но использовать ее или нет в принципе не имеет значения).
Не должно ли быть ядро ​​pydantic написано на Русте? Я что-то упускаю или делаю что-то не так?
Я знаю, что с validate_call у вас есть доступ к гораздо более сложным методам проверки и анализа, но почему это намного медленнее, чем несколько операторов if и isinstance() звонки?

Подробнее здесь: https://stackoverflow.com/questions/782 ... isinstance

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