11
votes

Comment profiler une commande de gestion personnalisée Django exclusivement

Je voudrais profiler une commande de gestion personnalisée relativement intensif de la CPU (rend une image à l'aide de PIL). Lorsque j'utilise la commande suivante, j'obtiens toutes sortes de modules Django (admin, orm, etc.) dans mes résultats de profilage: xxx pré>

J'ai supprimé toutes les importations pouvant éventuellement importer Django mais je devine le Voici le CULPRIT: P>

from django.core.management.base import BaseCommand, CommandError


1 commentaires

@Geo Grep n'aide pas beaucoup depuis que les chemins de fichiers ne sont pas donnés. Seuls les noms de fichiers sont imprimés. Supposons maintenant que j'ai eu utils.py que je veux profiler et il y a un autre utils.py quelque part à Django.


3 Réponses :


0
votes

Si je ne trouve aucune réponse. GPROF2DOT comme Expliqué ici peut être un hack acceptable.

Il ne filtre pas les modules Je ne suis pas intéressé, mais j'espère que cela facilitera la possibilité d'inspecter les résultats séparés visuellement à mes modules de code et de Django.


0 commentaires

0
votes

Séparez la fonctionnalité PIL dans sa propre fonction / classe dans son propre module et l'importait de votre commande de gestion. Ensuite, vous pouvez tester / profiler la fonctionnalité PIL indépendamment de Django.


3 commentaires

C'est comme si vous avez dit, dans un module séparé et d'être importé de la commande. Le problème est de savoir comment profiler indépendamment. Je n'ai même pas besoin de super isolation, je ne veux tout simplement pas 50 entrées connexes et 950 non liées. Voulez-vous que je publie du code?


Je ne comprends pas où se trouve le problème. Si vous l'avez séparé dans son propre module (qui n'a pas de références à Django du tout), vous ne pouvez pas écrire un simple harnais de test pour exercer ce module et profiler? Je ne peux pas voir comment il y aurait un code Django dans votre sortie de profil alors.


Créer un autre exécutable que vous voulez dire? Ce serait une solution. J'essaie simplement de savoir s'il serait possible d'une manière ou d'une autre, en utilisant une commande de gestion Django.



18
votes

J'ai résolu ce problème de la manière suivante:

python manage.py testrender --profile


1 commentaires

On dirait que cela n'est plus valable avec les changements de Django, mais je l'ai compris à partir de là. Voici un exemple mis à jour .