python - Django:我可以使数据库查询异步吗?
问题描述
在我的应用程序中,我有一个模板,我希望它像一个显示大量信息的控制中心,所以我必须进行大量查询才能获取这些信息。
所以当然,页面很慢,现在我正在考虑如何解决这个问题。我考虑过制作索引,但我没有这个空间。我已经优化了我的查询以尽可能减少浪费,但加载页面仍然需要 1:30 分钟。
我正在研究 Django 的异步支持,但我使用的 Django 版本似乎不支持(2.1)。
有人有任何提示可以帮助我吗?
我没有展示我的代码,因为我认为这不是必需的,因为这个问题更抽象。这不是关于我的问题的具体问题,而是更多关于一般优化的问题。
解决方案
最好的办法是使用Celery。
虽然不推荐,但可以使用 python 线程池。像这样的东西:
queries = {
'1': query_1, # These are your queries.
'2': query_2,
'3': query_3,
'4': query_4,
}
# Since queries are lazy in Django, they have not been evaluated, yet.
# creating a threadpool
pool = ThreadPool(processes=int(len(queries) * 0.5))
threads = dict()
results = {}
for key in queries.keys():
threads[key] = pool.apply_async(lambda f: f, args=(queries[key], ))
# wait for all threads to finish
for key, item in threads.items():
results[key] = item.get()
现在您的查询正在被异步评估。
推荐阅读
- python - 如何创建用于带发票的条带订阅的付款来源
- mysql - 使用 MySQL 检查重复访问和更新表
- html - 调整 SVG 背景宽度和高度
- python - 更新或添加验证器到现有的 WTForms 字段
- android - 如何在 Google Maps Android SDK 的折线上添加形状
- php - 使用 ansible 管理 php 配置 - lineinfile php.ini vs 复制到 php.d?
- linux - 伴侣终端;已停止工作;返回“无法解析参数:无法打开显示:”
- javascript - 如何更改 SweetAlert2 中的文本颜色?
- visual-studio-code - 实时服务器扩展不起作用,我现在该怎么办?我尝试更改扩展设置,但无法修复
- julia - 如何将特定包从基础环境添加到现有的 conda 环境?