Django 的 "Performing system checks" 需要很长时间 - Dash Plotly

Django's "Performing system checks" takes ages - Dash Plotly

所以我设置了一个由 Django 提供支持的 webpage/webapplication。 以前我使用 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 秒后完成。


所以问题是:

好的,我发现了问题:

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

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