【发布时间】: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