【发布时间】:2018-01-09 14:44:32
【问题描述】:
我在 Django 应用程序中有一个视图,该视图将一个大型 csv 文件作为输入,它循环所有行并在数据库中插入数据。 在本地我没有问题,但是当我在线部署我的项目时,视图会在一段时间后让我超时。 我的网络服务器配置是 Nginx + Gunicorn。 我试图通过写入一个大数字(120000)来增加 Gunicorn 和 proxy_connect_timeout 上的超时,Nginx 上的 proxy_read_timeout 现在更好,我在大约 90 秒后超时而不是 30 秒(Gunicorn 的默认值)但仍然不是我所期望的,并且完成我的工作还不够。 另外我不太喜欢这种方法,我不希望每个请求都无限超时。 处理长请求并且没有超时的最佳方法是什么? 也许通过用消息回答用户然后在后台运行作业?有什么建议吗? 谢谢。
【问题讨论】:
-
这样的工作,你应该使用celery+rabbitMQ等任务队列。
-
不要尝试增加超时。视图在调用时应该快速响应。如果您需要执行长时间运行的任务,您应该查看异步作业执行。 Celery 最适合这个,但你也可以使用 python 线程在不同的线程中运行你的工作。见docs.python.org/3.6/library/threading.html
-
是的,你是对的,增加超时不是我问的解决方案。谢谢你的回答。