Я пишу приложение фляжки с flask_restful
.
У меня есть 1 конечная точка, которая будет читать некоторые файлы и ответ.
Сначала я запустил сервер разработки, затем использовал gevent
from gevent.pywsgi import WSGIServer
# app.run(port=9788, threaded=True, debug=True)
http_server = WSGIServer(('', 9788), app)
http_server.serve_forever()
Затем я написал еще один скрипт на Python, делающий 100 произвольных запросов, поместил их в Pool()
. Там нет 502
с.
Пока все хорошо.
Я добавил другую конечную точку, которая должна запрашивать данные и записывать результаты в файл на диске как csv
.
Я снова запустил скрипт и выполнил 1 запрос ко второй конечной точке.
Когда 2-й запрос записывает файл на диск, все запросы зависают. Как только это сделано, они начинают снова.
Это мой фрагмент кода.
if __name__ == '__main__':
app = Flask(__name__)
api = Api(app)
api.add_resource(DownloadCSVQuery, '/query_to_csv') # Route_3
class DownloadCSVQuery(Resource):
def post(self):
msg, is_succeed = self.begin_download(request.json)
return msg, 200 if is_succeed else 500
def begin_download(self, input_query):
# some code to query the data
# open a new file with 'w' option
# use csv.writer to start writing
Разве я не должен записывать на диск? Это даже причина? если так, то какой обходной путь?
Возможно, я смогу обойти эту проблему, написав напрямую, например, S3
, но у меня будет третья конечная точка, которую необходимо записать в локальный двоичный файл перед загрузкой на S3.