【问题标题】:Django's "Performing system checks" takes ages - Dash PlotlyDjango 的“执行系统检查”需要很长时间 - Dash Plotly
【发布时间】:2021-07-19 19:50:13
【问题描述】:

所以我设置了一个由 Django 提供支持的网页/网络应用程序。 以前我使用 MySQL 数据库作为后端,一切顺利,但后来我尝试切换到 PostGreSQL

当我现在尝试在 shell 中启动服务器时,它在“执行系统检查...”过程中一直卡住。 从那里开始,我的计算机使用大量 CPU 需要很长时间(大约 5-6 分钟),直到最终服务器正常启动。

最后,如果我运行“python -v manage.py check”,那么我可以看到进程在某个点卡住了好几分钟:

import 'django.db.models.sql.compiler' # <_frozen_importlib_external.SourceFileLoader object at 0x7ff640701890>

但是,我使用 pycharm,当我打开 python 控制台时,我可以毫无问题地导入库。

我创建了一个最小示例来跟踪问题。只需将其导入到任何地方(例如在项目的 url.py 文件中),然后尝试启动服务器即可复制它。

ExampleFile.py

from apolloWebApp.models import DiseaseGeneAssociations

# Load database entries with distinct IDs
def create_network_elements(score_limit):
    distinct_diseases = DiseaseGeneAssociations.objects.values('diseaseid').distinct()  # query for distinct diseases
    distinct_diseases_list = list(distinct_diseases)  # [{'diseaseid': 'C0002395'}, ... ]

# Iterate over entries and filter database entries
    for disease in distinct_diseases_list:
        associated_DisGeneAss_objs = DiseaseGeneAssociations.objects.filter(score__gte=score_limit,
                                                                                diseaseid=disease["diseaseid"])
# Transform result into list -> Commenting it out fixes the problem
        associated_DisGeneAss_objs = list(associated_DisGeneAss_objs)

# dummy return to make sure everything is executed
    return associated_DisGeneAss_objs


test = create_network_elements(0.5)

到目前为止,我想通了: 似乎在系统检查期间还执行了 SQL 查询,这导致了问题。 但是,如果我注释掉过滤器结果 list(associated_DisGeneAss_objs 的演员表,那么检查会在 2 秒后完成。


所以问题是:

  • 为什么系统检查需要这么长时间?
  • 是否真的在系统检查期间完全执行 SQL 查询?
  • 但为什么还要花这么多时间?
  • 为什么将演员表注释到列表中可以解决问题?

【问题讨论】:

    标签: django postgresql backend


    【解决方案1】:

    好的,我发现了问题:

    问题是由 Dash-Plotly 造成的(在我的例子中,我使用了Dash Cytoscape),因为“All of the callbacks in a Dash app are executed with the initial value of their inputs when the app is first loaded.”。 我认为只需将应用程序导入另一个 python 文件就足以触发该执行。 是的,确实是我的数据库太大了,因此导致应用程序触发的查询花费了很多时间。

    因此,我的解决方案是将查询分解为更有效的请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 2021-06-15
      • 2016-04-22
      • 2019-12-29
      • 2021-12-25
      • 2016-06-17
      相关资源
      最近更新 更多