postgresql Django的“执行系统检查”非常慢- Dash Plotly

eqqqjvef  于 12个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(158)

所以我建立了一个由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查询,这导致了问题。但是,如果我注解掉过滤器结果列表的强制转换(associated_DisGeneAss_objs*),那么检查在2秒后完成。
  • 所以问题是:*
  • 为什么系统检查要花这么长时间?
  • 它真的在系统检查期间完全执行SQL查询吗?
  • 但为什么要花这么多时间?
  • 为什么注解出的演员阵容到一个列表解决了这个问题?
eivgtgni

eivgtgni1#

我发现了问题:
这个问题是由Dash-Plotly创建的(在我的例子中,我使用了Dash Cytoscape),因为“当应用首次加载时,Dash应用中的所有回调都是用它们的输入的初始值执行的。"。我认为只需将应用导入另一个Python文件就足以触发执行。是的,确实是我的数据库太大,因此导致了查询,这些都是由应用程序触发的,要花这么多时间。
因此,我的解决方案是将查询分解为更有效的请求。
P.S.:我还创建了一个Google-Groups条目,您可以找到here

相关问题