我有一个基于 Web 的应用程序,用于对用户提交的文本进行一些语言分析。这是一项相当耗费内存的任务,通常需要很长时间(例如,处理 30 个文件最多需要 3 分钟)。我使用 Django 的 StreamingHttpResponse 函数来完成这项工作,但注意到 nginx 在处理大约 7 个文件(不到 50 秒)后丢弃了用户的请求。我尝试调整 nginx 和 Gunicorn keep_alive 设置,但似乎不起作用。我想知道这里有没有人可以给我一些指点?
我还想知道解决需要很长时间计算的任务的最佳方法是什么?异步吗?
答案1
I'm also wondering what is the best approach to tackle a task that takes a long time to compute? Asynchronously?
这就是工作队列的用途。您应该考虑将文件提交与处理分开。让用户提交文件,保存文件,向工作队列添加消息以处理它们,实际上是异步的。用户继续处理他们的业务,可能会看到加载屏幕,但它不再与该网络会话相关。
与此同时,一个单独的进程从工作队列中挑选新任务,无论用户正在做什么,都会独立处理每个任务。有许多这样的排队系统,例如 Amazon AWS SQS:
答案2
我发现没有人回答,所以我在 Google 中输入了你的问题,结果发现这一页。您是否尝试过按照建议增加所有适用的超时时间?这似乎是要做的第一件事。