flask_restful не обрабатывает параллельные запросы при записи на диск - PullRequest
0 голосов
/ 29 августа 2018

Я пишу приложение фляжки с 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.

...