由于check_url_config系统检查,Django缓慢自动重载

时间:2016-06-28 10:22:52

标签: django python-3.x django-1.9

我在python manage.py runserver上的加载和自动加载需要花费很多时间。 (25秒+)。我做了一些挖掘,似乎停留在“执行系统检查......”。为了进一步研究,我在每个检查函数上添加了计时器。

C:\Programs\Python35-32\python.exe manage.py runserver
Performing system checks...

self.check: check_default_cache_is_configured 0.0
self.check: check_duplicate_template_settings 0.0
self.check: check_all_models 0.028018712997436523
self.check: check_model_signals 0.0
self.check: check_setting_app_dirs_loaders 0.0
self.check: check_url_config 25.260559558868408
self.check: check_admin_app 0.0
self.check: check_user_model 0.0
self.check: check_generic_foreign_keys 0.0010006427764892578
System check identified no issues (0 silenced).
self.check: 25.289578914642334
self.check_migrations: 0.08856558799743652
June 28, 2016 - 15:43:08
Django version 1.9.6, using settings 'mar16_cookifi_com.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

我发现在check \ urls.py中,resolver.url_patterns需要很长时间。

def check_resolver(resolver):
    """
    Recursively check the resolver.
    """
    from django.core.urlresolvers import RegexURLPattern, RegexURLResolver
    warnings = []
    for pattern in resolver.url_patterns:
        if isinstance(pattern, RegexURLResolver):
  1. 我不确定urlresolver.url_patterns花了很长时间。我很感激帮助理解为什么加载url_patters需要25秒。我该怎么做才能减少这种情况。

  2. 至少,我想禁用check_url_config。更优选1的溶液。

  3. 添加了:

    我手动禁用了django代码中的检查功能。 [编辑]实际上它只是将问题延迟到第一次加载,耗时25秒。

    @register(Tags.urls)
    def check_url_config(app_configs, **kwargs):
        return []
        if getattr(settings, 'ROOT_URLCONF', None):
            from django.core.urlresolvers import get_resolver
            resolver = get_resolver()
            return check_resolver(resolver)
        return []
    

    时间减少到次秒:

    C:\Programs\Python35-32\python.exe manage.py runserver
    Performing system checks...
    
    self.check: check_default_cache_is_configured 0.0
    self.check: check_duplicate_template_settings 0.0
    self.check: check_all_models 0.028048038482666016
    self.check: check_model_signals 0.0
    self.check: check_setting_app_dirs_loaders 0.0
    self.check: check_url_config 0.0
    self.check: check_admin_app 0.0
    self.check: check_user_model 0.0
    self.check: check_generic_foreign_keys 0.0
    System check identified no issues (0 silenced).
    self.check: 0.028048038482666016
    self.check_migrations: 0.06304526329040527
    June 28, 2016 - 16:24:36
    Django version 1.9.6, using settings 'mar16_cookifi_com.settings'
    Starting development server at http://127.0.0.1:8000/
    Quit the server with CTRL-BREAK.
    

    但我希望有一个解决方案,我不修改django代码。

    再过一小时:

    找到问题的原因。 url文件正在加载我们的所有视图。其中一个观点最近增加了一个ML模块,需要25秒才能训练。使ML模块延迟将加载时间缩短到一秒。

1 个答案:

答案 0 :(得分:0)

Django有一个SILENCED_SYSTEM_CHECKS可以防止显示警告,但它没有钩子来阻止检查运行。

您可以通过在Django源代码中注释掉the import来阻止URL检查。

但是,我不确定这会加快您的申请速度。加载URL模式后,Django会同时导入视图。如果你禁用URL检查,那么Django仍然需要稍后加载URL配置,所以我怀疑你会看到类似的延迟。您应该进一步调查以找出包含X,Y = np.meshgrid(label_x,label_y) out = np.column_stack((Y.ravel(),X.ravel(),a.ravel())) 个文件和视图需要花费很长时间才能加载的文件。