Django long request timeout
我在Django应用程序中有一个视图,它将一个大的csv文件作为输入,循环所有行,并在db上插入数据。在本地我没有问题,但是当我在线部署我的项目时,视图会在一段时间后给我一个超时。我的Web服务器配置是nginx+gunicorn。我试着在gunicorn和proxy connect-timeout上增加超时,在nginx上通过写一个大的数字(120000)来增加proxy-read-timeout,现在更好了,我在大约90秒后得到超时,而不是30秒(gunicorn的默认值),但仍然不是我所期望的,这还不足以完成我的工作。另外,我不太喜欢这种方法,我不希望每个请求都有无限的超时。处理长请求而没有超时的最佳方法是什么?可能是通过用一条消息回答用户,然后在后台运行作业?有什么建议吗?谢谢。
将芹菜与django一起用于后台任务处理,这意味着使用芹菜异步任务处理csv文件。
或
作为一个快速的黑客,如果你不想使用芹菜;使用多线程来处理csv,并将处理结果保存在db或file中,并将结果从db或file服务器上。
注意:不要在主线程上处理大文件;总是尝试使用其他服务器来处理大文件。如果无法使用其他服务器,则尝试在后台任务中处理它。
在这个stackoverflow链接上可以找到许多解决方案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | I spend more time to increase the request timeout. And Finally I got the soluton For **Django Rest API ( Nginx + supervisor + Gunicorn + AWS )** 1. Add timeout in the gunicorn(Supervisor config) [program:gunicorn] command = <env_path>/env/bin/gunicorn --pythonpath=<python_path> --name=<nginx_name> --bind unix:/tmp/myproject.sock --workers 3 --graceful-timeout=900 --timeout=900 <project_path>.wsgi:application directory=<project_path> autostart=true autorestart=true stopsignal=TERM stdout_logfile=/var/log/gunicorn.stdout.log stdout_logfile_maxbytes=1MB stdout_logfile_backups=5 stderr_logfile=/var/log/gunicorn.stderr.log stderr_logfile_maxbytes=1MB stderr_logfile_backups=5 2. Add proxy on nginx file proxy_connect_timeout 900; proxy_send_timeout 900; proxy_read_timeout 900; send_timeout 900; 3. Changes in Load Balancer ( If you configure -> in EC2 instance) [Load Balancer][1] [1]: https://i.stack.imgur.com/uSUrK.png |