[PYTHON] Ein kurzer Blick auf Ihr Profil in der Django-App

Ich denke, es ist eine gute Praxis, sich das Profil anzusehen und den Test zu schreiben, wenn eine Reihe von Verfahren implementiert werden. Eine zu frühe Optimierung ist nicht gut, aber nur das Erkennen eines kleinen Engpasses, bevor ein Leistungsproblem auftritt, gibt Ihnen den Spielraum, "jederzeit abzustimmen".

# coding:utf-8

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings")

import django
django.setup()


if __name__ == "__main__":
    """
    $ cd /path/to/project
    $ python -m project.profile
    """
    import cProfile
    import pstats

    #Die Funktion, die Sie im Profil sehen möchten
    from app.models import func_to_profile

    prf = cProfile.Profile()
    prf.runcall(func_to_profile)
    pstats.Stats(prf
        ).sort_stats('time'  #Interne Zeitsortierung in absteigender Reihenfolge
        ).print_stats(.03)   #Die Besten 3%Zeige nur

Die Ergebnisanzeige sieht folgendermaßen aus

$ python -m project.profile
         9109096 function calls (8991335 primitive calls) in 8.224 seconds

   Ordered by: internal time
   List reduced from 463 to 14 due to restriction <0.03>

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
   125620    0.723    0.000    0.723    0.000 /path/to/django/utils/dateparse.py:107(<dictcomp>)
    62810    0.631    0.000    0.805    0.000 /path/to/django/db/models/base.py:388(__init__)
   125620    0.435    0.000    1.702    0.000 /path/to/django/utils/dateparse.py:84(parse_datetime)
   265490    0.395    0.000    0.640    0.000 /path/to/django/db/models/fields/related.py:1619(local_related_fields)
      670    0.339    0.001    3.027    0.005 {method 'fetchmany' of 'sqlite3.Cursor' objects}
   125620    0.292    0.000    2.242    0.000 /path/to/django/db/backends/sqlite3/utils.py:6(parse_datetime_with_timezone_support)
   279460    0.291    0.000    0.474    0.000 /path/to/django/db/models/fields/related.py:1633(get_instance_value_for_fields)
   265490    0.205    0.000    1.209    0.000 /path/to/django/db/models/fields/related.py:1627(get_local_related_value)
   549522    0.199    0.000    0.199    0.000 {hasattr}
   127330    0.198    0.000    0.198    0.000 {method 'match' of '_sre.SRE_Pattern' objects}
672800/561660    0.194    0.000    0.423    0.000 {setattr}
   127330    0.175    0.000    0.175    0.000 {method 'groupdict' of '_sre.SRE_Match' objects}
    55570    0.157    0.000    0.263    0.000 /path/to/django/db/models/fields/related.py:615(__set__)
   376960    0.154    0.000    0.254    0.000 /path/to/django/db/models/fields/related.py:1609(related_fields)(app)


Wenn man das Ergebnis betrachtet, scheint es schwierig zu sein, die SQLite-Daten auf "datetime" zu analysieren. Sie sehen, dass es möglich ist, Maßnahmen zu ergreifen, z. B. die zu analysierenden Spalten im Notfall einzugrenzen.

Recommended Posts

Ein kurzer Blick auf Ihr Profil in der Django-App
Initialisieren Sie die Django-App
Lassen Sie uns eine Todo-App mit dem Django REST-Framework erstellen
Schauen Sie sich das Kaggle / Titanic-Tutorial genauer an
Versuchen Sie es mit dem Python-Webframework Django (2). Schauen Sie sich settings.py an
Sehen Sie sich die in Python integrierte Ausnahmebaumstruktur an
Profil innerhalb einer Methode der Klasse
Werfen wir einen Blick auf die Feature-Map von YOLO v3
Sehen Sie sich die in Python 3.8.2 integrierte Ausnahmebaumstruktur an
Implementieren Sie die Django-App auf Hy
Die Geschichte, einen süßen und schmerzhaften Blick auf benutzerdefinierte Benutzer auf Django zu werfen
Erstellen Sie ein Modell für Ihren Django-Zeitplan
Stellen Sie die Django-App in Heroku bereit [Teil 2]
Stellen Sie die Django-App in Heroku bereit [Teil 1]
Erstellen der ersten App mit Django Startprojekt
Werfen wir einen Blick auf den Scapy-Code. Wie bearbeiten Sie die Struktur?