जवाबों:
Django डीबग टूलबार का प्रयास करें । यह आपको दिखाएगा कि प्रत्येक पृष्ठ पर कौन से प्रश्न निष्पादित किए गए हैं और उन्हें कितना समय लगता है। यह वास्तव में उपयोगी, शक्तिशाली और उपकरण का उपयोग करने में आसान है।
इसके अलावा, डेटाबेस एक्सेस ऑप्टिमाइज़ेशन में Django प्रदर्शन के बारे में सिफारिशें पढ़ें प्रलेखन से ।
और जैकब कापलान-मॉस द्वारा Django प्रदर्शन युक्तियाँ ।
Google पर "django-profiling" टाइप करें, आपको ये लिंक मिलेंगे (और अधिक):
http://code.djangoproject.com/wiki/ProfilingDjango
http://code.google.com/p/django-profiling/
http://www.rkblog.rk.edu.pl/w/p/django-profiling-hotshot-and-kcachegrind/
व्यक्तिगत रूप से मैं मिडिलवेयर दृष्टिकोण का उपयोग कर रहा हूं - अर्थात प्रत्येक उपयोगकर्ता एक सत्र में संग्रहीत "प्रोफाइलिंग" ध्वज को टॉगल कर सकता है, और यदि मेरा प्रोफाइलिंग मिडलवेयर नोटिस करता है कि एक ध्वज सेट किया गया है, तो वह पायथन के हॉटशॉट मॉड्यूल का उपयोग करता है :
def process_view(self, request, view_func, view_args, view_kwargs):
# setup things here, along with: settings.DEBUG=True
# to get a SQL dump in connection.queries
profiler = hotshot.Profile(fname)
response = profiler.runcall(view_func, request, *view_args, **view_kwargs)
profiler.close()
# process results
return response
संपादित करें: एसक्यूएल प्रश्नों की रूपरेखा के लिए, कोनिस्टेंटिन द्वारा उल्लिखित http://github.com/robhudson/django-debug-toolbar एक अच्छी बात है - लेकिन यदि आपके प्रश्न वास्तव में धीमे हैं (शायद इसलिए कि उनमें से सैकड़ों या हजारों हैं), तो आप जब तक यह एक ब्राउज़र में लोड नहीं हो जाता तब तक पागल समय की प्रतीक्षा कर रहा होगा - और फिर धीमेपन के कारण इसे ब्राउज़ करना मुश्किल होगा। इसके अलावा, django-debug-toolbar AJAX अनुरोधों के आंतरिक मामलों में उपयोगी जानकारी देने में असमर्थ डिजाइन द्वारा है।
EDIT2: django- एक्सटेंशन में एक महान प्रोफाइलिंग कमांड बनाया गया है:
https://github.com/django-extensions/django-extensions/blob/master/docs/runprofileserver.rst
बस यह करें और वोइला:
$ mkdir /tmp/my-profile-data
$ ./manage.py runprofileserver --kcachegrind --prof-path=/tmp/my-profile-data
python manage.py runprofileserver --prof-path=/path/to/dir
, तो इस ब्लॉग का अनुसरण करें: darkcoding.net/software/profiling-django-for-cpu-bound-apps ।
hotshot
पदावनत किया गया है और अजगर 3 में हटा दिया है, तो यह जवाब और ProfilingDjango
विकी पृष्ठ अब 20202. में प्रासंगिक हो सकता है
प्रोफाइलिंग डेटा एक्सेस के लिए (जो कि अड़चन सबसे ज्यादा है) django-live-profiler देखें । Django डीबग टूलबार के विपरीत, यह एक साथ सभी अनुरोधों पर डेटा एकत्र करता है और आप इसे बहुत अधिक प्रदर्शन ओवरहेड या अपने ऐप इंटर्नल को उजागर किए बिना उत्पादन में चला सकते हैं।
बेशर्म प्लग यहाँ, लेकिन मैंने हाल ही में इस उद्देश्य के लिए https://github.com/django-silk/silk बनाया है । यह कुछ हद तक django टूलबार के समान है लेकिन इतिहास, कोड प्रोफाइलिंग और हर चीज पर अधिक महीन दाने वाले नियंत्रण के साथ।
आप सभी KCacheGrind प्रशंसकों के लिए, मुझे लगता है कि Django के शानदार परीक्षण के साथ मिलकर इसका उपयोग करना बहुत आसान है Client
-साथ-साथ, विशेष रूप से उत्पादन में प्रोफ़ाइल लॉग बनाने के लिए । मैंने इस तकनीक का उपयोग कई मौकों पर किया है क्योंकि इसमें हल्का स्पर्श है - कोई pesky मिडलवेयर या तृतीय-पक्ष Django अनुप्रयोगों की आवश्यकता नहीं है!
उदाहरण के लिए, एक विशेष दृश्य को प्रोफ़ाइल करने के लिए जो धीमी गति से चल रहा है, आप खोल को खोल सकते हैं और इस कोड को टाइप कर सकते हैं:
from django.test import Client
import hotshot
c = Client()
profiler = hotshot.Profile("yourprofile.prof") # saves a logfile to your pwd
profiler.runcall(c.get, "/pattern/matching/your/view/")
profiler.close()
परिणामी लॉग की कल्पना करने के लिए, मैंने hotshot2cachegrind का उपयोग किया है:
लेकिन अन्य विकल्प भी हैं:
जब दृश्य HTML नहीं होते हैं, उदाहरण के लिए JSON, प्रोफाइलिंग के लिए सरल मिडलवेयर विधियों का उपयोग करें।
यहाँ कुछ उदाहरण दिए गए हैं:
https://gist.github.com/1229685 - सभी sql कॉल्स को कैप्चर करने के दृश्य में चला गया
https://gist.github.com/1229681 - प्रोफ़ाइल सभी विधि कॉल का उपयोग दृश्य बनाने के लिए किया जाता है
मुझे हाल ही में एक Django ऐप को प्रोफाइल करने की आवश्यकता थी और इनमें से कई सुझावों की कोशिश की। मैंने इसके बजाय pyinstrument का उपयोग करके समाप्त कर दिया , जो कि मिडलवेयर सूची के एकल अद्यतन का उपयोग करके एक Django ऐप में जोड़ा जा सकता है और समय के स्टैक-आधारित दृश्य प्रदान करता है।
कुछ अन्य उपकरणों के साथ मेरे अनुभव का त्वरित सारांश:
pyinstrument
cProfile
समय पर पहुंचने का एक आसान तरीका भी प्रदान करता है और स्वचालित रूप से अजाक्स का समय प्रदर्शित करता है, दोनों ही वास्तव में सहायक हो सकते हैं।मेरे द्वारा आजमाए गए अन्य साधनों की तुलना में, pyinstrument
इसे स्थापित करने और उपयोग करने के लिए नाटकीय रूप से आसान था।