Загрузка большого файла с использованием Flask и Celery - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь осуществить загрузку большого файла в flask, используя celery. У меня есть функция, которая сохраняет поток файлов на диск как задача сельдерея , но моя реализация требует использования контекста request внутри моей функции задачи. Я провел свое исследование и внедрил решения, предоставленные по ссылкам, указанным для этого ответа , но, похоже, это не работает с моей версией сельдерея , которая 4.1.0

Вот что я делаю

Это моя задача

@task(name="app.save_operation")
def save_operation():
    content = request.files["content"]
    content.save(
        content.filename)
    content.stream.close()
    return

Это @task оболочка

def task(**kwargs):
    def decorator(func):
        @celery_helper.task(**kwargs)
        @functools.wraps(func)
        def wrapped(*args, **kwargs):
            with app.test_request_context():
                return func(*args, **kwargs)
        return wrapped
    return decorator

И это функция-обработчик API, где я вызываю эту задачу

@app.route("/upload", methods=["GET", "POST"])
def upload():
    if (request.method == "POST"):
        filename = request.files["content"].filename
        task_id = save_operation.delay()
        return "upload started for "+filename

`` Теоретически это должно работать нормально, но когда я это делаю, сельдерей выдает BadRequestKeyError, что по сути означает, что объект request, на который ссылается задача save_operation(), не передается должным образом. Я не могу понять, почему это происходит, и я достиг контрольно-пропускного пункта в своих исследованиях.

Мне бы очень хотелось узнать об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...