Замедляется ли использование методов post_save и post_delete на всех Django скоростях проекта? - PullRequest
3 голосов
/ 07 апреля 2020

Я хочу отслеживать количество записей в базе данных. Я не хочу использовать (в моем случае) Book.objects.all().count(). Я знаю, что это работает довольно быстро, но я не думаю, что это хороший способ. Я реализовал Tracker класс и буду работать с этим синглтоном типом класса, если нужны цифры.

Вопрос: Использует ли post_save и post_delete медленно вниз по моему Django проекту?

по моему исходному коду

models.py

from django.db.models.signals import post_save, post_delete
from django.db import models


class Singleton(object):
    _instance = None

    def __new__(class_, *args, **kwargs):
        if not isinstance(class_._instance, class_):
            class_._instance = object.__new__(class_, *args, **kwargs)
        return class_._instance


class Book(models.Model):
    name = models.CharField(max_length=255)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.name


class Tracker(Singleton):
    def __init__(self):
        self.__count = self.__get_numbers()

    def __get_numbers(self):
        print("I am getting records")
        return Book.objects.all().count()

    @property
    def count(self):
        return self.__count


def update_record_count(sender, **kwargs):
    tracker = Tracker()
    print("Database entries: {}".format(tracker.count))


post_save.connect(update_record_count, sender=Book)
post_delete.connect(update_record_count, sender=Book)

То, что я написал выше, является действительно творческим, просто для учебных целей

1 Ответ

1 голос
/ 07 апреля 2020

Замедляет ли использование post_save и post_delete мой проект Django?

Как и следовало ожидать, ответ: «Это зависит». Обработчики сигналов выполняются в том же потоке, который выполняет сохранение или удаление. Любой код, который написан в обработчике (если он не асин c каким-то образом), будет блокироваться. Если ваш обработчик logi c быстрый, то вы не должны ничего замечать. Если это займет 1 с, то операции сохранения и удаления займут больше секунды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...