'Have you seen python web developers who do high load site development for living?'
'Oh, almost all of them do such things,' you say.
'Have you seen python devs who know how to debug?'
'A few,' you say.
'Have you seen python devs who profile things that supposed to be high loaded?'
Python has cProfile, C has kcachegrind, they look good together.
For instance, lets profile multithreaded wsgi app. Change your handler
'Oh, almost all of them do such things,' you say.
'Have you seen python devs who know how to debug?'
'A few,' you say.
'Have you seen python devs who profile things that supposed to be high loaded?'
Python has cProfile, C has kcachegrind, they look good together.
For instance, lets profile multithreaded wsgi app. Change your handler
def read(self, request, *args, **kwargs): ... return ...To something like
def read(self, *args, **kwargs): import cProfile import uuid cProfile.runctx('self.read2(*args, **kwargs)', globals(), locals(), '/folder_with_stats/' + uuid.uuid4().get_hex()) return self.__res def read2(self, *args, **kwargs): self.__res = self.read3(*args, **kwargs) def read3(self, request, *args, **kwargs): ... return ...Then (high) load your app. Gather results from folder_with_stats
import os import pstats import time from pyprof2calltree import convert # Collect stats p = None for i in os.listdir('/folder_with_stats'): filename = '/folder_with_stats/' + i if not p: p = pstats.Stats(filename) else: p.add(filename) os.unlink(filename) res = str(int(time.time())) + '.kgrind' convert(p, res) os.execlp('kcachegrind', res)The main thing here to note is pyprof2calltree. The result
No comments:
Post a Comment