首页 > 解决方案 > Django:我可以使数据库查询异步吗?

问题描述

在我的应用程序中,我有一个模板,我希望它像一个显示大量信息的控制中心,所以我必须进行大量查询才能获取这些信息。

所以当然,页面很慢,现在我正在考虑如何解决这个问题。我考虑过制作索引,但我没有这个空间。我已经优化了我的查询以尽可能减少浪费,但加载页面仍然需要 1:30 分钟。

我正在研究 Django 的异步支持,但我使用的 Django 版本似乎不支持(2.1)。

有人有任何提示可以帮助我吗?

我没有展示我的代码,因为我认为这不是必需的,因为这个问题更抽象。这不是关于我的问题的具体问题,而是更多关于一般优化的问题。

标签: pythondjango

解决方案


最好的办法是使用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()

现在您的查询正在被异步评估。


推荐阅读