jazzband / django-silk

Silky smooth profiling for Django
MIT License
4.35k stars 333 forks source link

RecursionError #633

Open sergun opened 1 year ago

sergun commented 1 year ago

Hi folks,

thanks a lot for this great tool!

When use it in drf project got RecursionError after some time. More deeper analysis showed that some functions get called recursively more and more times and after standard recursion depth = 1000 we see error 500.

Restarting of python manage.py runserver Resets this "counter".

What can it be?

2022-12-17 13:00:35,666-ERROR-catalog_logger::middleware|56:: sergun@gmail.com GET /api/catalogs/medicine_groups/ occurred exception
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/site-packages/silk/profiling/profiler.py", line 161, in wrapped_target
    result = target(*args, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/silk/profiling/profiler.py", line 159, in wrapped_target
    self._start_queries()
  File "/usr/local/lib/python3.10/site-packages/silk/profiling/profiler.py", line 78, in _start_queries
    self._queries_before = self._query_identifiers_from_collector()
  File "/usr/local/lib/python3.10/site-packages/silk/profiling/profiler.py", line 74, in _query_identifiers_from_collector
    return [x for x in DataCollector().queries]
  File "/usr/local/lib/python3.10/site-packages/silk/collector.py", line 68, in queries
    return self._get_objects(TYP_QUERIES)
  File "/usr/local/lib/python3.10/site-packages/silk/collector.py", line 75, in _get_objects
    objects = self.objects
  File "/usr/local/lib/python3.10/site-packages/silk/collector.py", line 64, in objects
    return getattr(self.local, 'objects', None)
RecursionError: maximum recursion depth exceeded in comparison

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.10/site-packages/rest_framework/views.py", line 506, in dispatch
    response = handler(request, *args, **kwargs)
  File "/opt/app/utils/mixins.py", line 74, in list
    return super().list(request, *args, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/silk/profiling/profiler.py", line 161, in wrapped_target
    result = target(*args, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/silk/profiling/profiler.py", line 161, in wrapped_target
    result = target(*args, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/silk/profiling/profiler.py", line 161, in wrapped_target
    result = target(*args, **kwargs)
  [Previous line repeated 941 more times]
  File "/usr/local/lib/python3.10/site-packages/silk/profiling/profiler.py", line 168, in wrapped_target
    self._finalise_queries()
  File "/usr/local/lib/python3.10/site-packages/silk/profiling/profiler.py", line 109, in _finalise_queries
    self._end_queries()
  File "/usr/local/lib/python3.10/site-packages/silk/profiling/profiler.py", line 82, in _end_queries
    self._queries_after = self._query_identifiers_from_collector()
  File "/usr/local/lib/python3.10/site-packages/silk/profiling/profiler.py", line 74, in _query_identifiers_from_collector
    return [x for x in DataCollector().queries]
  File "/usr/local/lib/python3.10/site-packages/silk/collector.py", line 68, in queries
    return self._get_objects(TYP_QUERIES)
  File "/usr/local/lib/python3.10/site-packages/silk/collector.py", line 75, in _get_objects
    objects = self.objects
  File "/usr/local/lib/python3.10/site-packages/silk/collector.py", line 64, in objects
    return getattr(self.local, 'objects', None)
RecursionError: maximum recursion depth exceeded in comparison

Can dynamic profiling of generic DRF views mixins be involdev?

SILKY_DYNAMIC_PROFILING = [
    {
        'module': 'rest_framework.mixins.RetrieveModelMixin',
        'function': 'retrieve'
    },
    {
        'module': 'rest_framework.mixins.CreateModelMixin',
        'function': 'create'
    },
    {
        'module': 'rest_framework.mixins.ListModelMixin',
        'function': 'list'
    },
    {
        'module': 'rest_framework.mixins.UpdateModelMixin',
        'function': 'update'
    },
    {
        'module': 'rest_framework.mixins.DestroyModelMixin',
        'function': 'destroy'
    },
]