Вот минимальный пример кода. запрос curl curl http://127.0.0.1:5000/get_zip/my_zip.zip -o my_zip.zip
должен отправить пользователю файл archive/my_zip.zip
Без gunicorn
работает корректно и отключается через 30 секунд при запуске сервера с gunicorn
.
from os import path
from flask import Flask, request, jsonify, json, send_file
app = Flask(__name__)
@app.route('/get_zip/<file_path>', methods=['GET'])
def get_zip(file_path): # file_path: path to a large zip file
return send_file(path.join('archive', file_path), as_attachment=True)
if __name__ == '__main__':
app.run(host = "0.0.0.0", port = "5000", debug=False, use_reloader=False)
Каков правильный способ исправить это отключение при запуске под пушечным огнем?
30 секунд — значение по умолчанию timeout
для пушкикорна.
Чтобы увеличить его, используйте параметр --timeout <seconds>
в конфигурации вашего пушки.
Также, если вы запускаете gunicorn под nginx, не забудьте управлять настройками nginx:
proxy_connect_timeout <seconds>s;
proxy_read_timeout <seconds>s;
ОБНОВИТЬ:
лучше и безопаснее отправлять файлы из flask с помощью send_from_directory