Я пытаюсь осуществить загрузку большого файла в 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()
, не передается должным образом. Я не могу понять, почему это происходит, и я достиг контрольно-пропускного пункта в своих исследованиях.
Мне бы очень хотелось узнать об этом.