jazzband/django-silk

Problem with silk in child threads

Open

#169 建立於 2017年3月14日

在 GitHub 查看
 (13 留言) (7 反應) (0 負責人)Python (3,958 star) (319 fork)batch import
enhancementhelp wanted

描述

Hi,

I'm working on synchronous API that is processing some data. In order to speed things up I have decided to spawn multiple threads in Django request and do processing there. The problem occurs when one of the threads tries to execute sql queries. Is there any way to run silk and spawn child threads?

The self.register_objects(TYP_QUERIES, *args) could just give a warning in that case and carry on.

File "/zzzz/service/yyyy/xxxx.py", line 883, in get_negative_info
    p_1 = Node.objects.get(id=node)
  File "/Library/Python/2.7/site-packages/django/db/models/manager.py", line 122, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/Library/Python/2.7/site-packages/django/db/models/query.py", line 381, in get
    num = len(clone)
  File "/Library/Python/2.7/site-packages/django/db/models/query.py", line 240, in __len__
    self._fetch_all()
  File "/Library/Python/2.7/site-packages/django/db/models/query.py", line 1074, in _fetch_all
    self._result_cache = list(self.iterator())
  File "/Library/Python/2.7/site-packages/django/db/models/query.py", line 52, in __iter__
    results = compiler.execute_sql()
  File "/Library/Python/2.7/site-packages/silk/sql.py", line 52, in execute_sql
    DataCollector().register_query(query_dict)
  File "/Library/Python/2.7/site-packages/silk/collector.py", line 122, in register_query
    self.register_objects(TYP_QUERIES, *args)
  File "/Library/Python/2.7/site-packages/silk/collector.py", line 109, in register_objects
    self.ensure_middleware_installed()
  File "/Library/Python/2.7/site-packages/silk/collector.py", line 43, in ensure_middleware_installed
    raise_middleware_error()
  File "/Library/Python/2.7/site-packages/silk/collector.py", line 24, in raise_middleware_error
    'Silk middleware has not been installed correctly. Ordering must ensure that Silk middleware can '
RuntimeError: Silk middleware has not been installed correctly. Ordering must ensure that Silk middleware can execute process_request and process_response. If an earlier middleware returns from either of these methods, Silk will not have the chance to inspect the request/response objects.

Thanks, Marcin

貢獻者指南