django-plotly-dash在CPU密集型页面上的多会话

xe55xuns  于 2022-11-26  发布在  Go
关注(0)|答案(1)|浏览(174)

运行django-plotly-dash时,我有多个python页面。问题是当我加载其中一个页面时,它正在运行一些计算,我不能运行同一个页面或来自不同会话的其他页面,并且Web服务器没有为其他用户做出响应。如果我查看runserver的输出,它只忙碌呈现第一个请求。

pn9klfpd

pn9klfpd1#

如果我查看runserver的输出,它只忙碌呈现第一个请求。
如果我理解正确的话,这意味着您使用的是Django的开发服务器,因此您正在开发中(如果您在生产中使用django-admin runserver,这是一个严重的问题)。
现在是一个很好的时间来注意:不要在任何类似生产环境的环境中使用此服务器。它只用于开发。(我们从事的是制作Web框架的业务,而不是Web服务器。)
Django的开发服务器应该是多线程的,并且支持并发请求。然而,根据我的经验,我也注意到它一次只能处理一个请求。我没有深入研究,但我认为这可能是由一个应用程序重写runserver命令并禁用多线程造成的。
在开发过程中,这应该不是什么大问题。在生产中,您不会遇到这种阻塞,因为真实的的WSGI服务器,如gunicorn,将能够处理多个并发请求(假设它被配置为正确使用可用资源,并且硬件能够处理负载)。
然而,如果您的页面实际上响应很慢,这对于加载页面的用户来说可能是个问题,并且还将需要更多的资源来处理更多的并发请求。这完全取决于“慢”是指2秒、5秒、30秒还是更长。减少响应时间在很大程度上取决于代码的瓶颈,可能包括:

  • 优化算法
  • 减少和优化SQL查询(请参阅Database access optimization
  • 将不影响响应的计算延迟到Celery
  • 使用websockets在计算数据时流动和显示数据,而不会阻塞客户端,直到整个页面都计算完毕。(请参阅django-channels
  • 使用asyncio避免在等待I/O操作时保持空闲。

相关问题