使用Flask和Celery上传大文件

时间:2019-03-20 06:50:19

标签: python flask celery long-running-processes

我正在尝试使用Wed Mar 20 12:52:50 2019 [21570][1][FATAL] Array ( [Host] => localhost [Connection] => keep-alive [module] => Accounts [Cache-Control] => no-cache [oauth_token] => 9efe19d4d2ec3b557b4d0588a3f74d5d3cc0ed46 [platform] => base [User-Agent] => Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 [Postman-Token] => 3ddc88e1-e7a8-700f-580b-801da5f0adde [Accept] => */* [Accept-Encoding] => gzip, deflate, br [Accept-Language] => en-US,en;q=0.9 [Cookie] => download_token_base=e790d5a8-17a4-4110-98ab-a6648a0ef385 ) flask中实现大文件上传。我有一个将文件流作为 celery任务保存到磁盘的函数,但是,我的实现要求在我的任务函数内部使用celery上下文。我已经进行了研究,并实现了on this answer所提供的链接上提供的解决方案,但是,这似乎不适用于我的 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

这是我要调用此任务的API处理程序函数

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

`` 这在理论上应该可以正常工作,但是当我这样做时, celery 抛出一个@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对象任务未正确传递。我无法弄清楚为什么会这样,而我的研究也遇到了障碍。

我真的希望对此有一些见识。

0 个答案:

没有答案