flask celery hdfs 异步上传

在Flask和Celery环境下实现异步上传文件到HDFS(Hadoop Distributed File System)的功能,可以大大提高Web应用的性能和用户体验。以下是一个详细的步骤和代码示例,帮助你实现这一功能。

步骤 1: 环境准备

  1. 安装必要的库

    复制代码
    pip install Flask Celery hdfs pip install redis # 如果使用Redis作为消息代
  2. 设置Redis‌(Celery需要消息代理,这里以Redis为例)

    复制代码
    redis-server

步骤 2: 创建Flask应用和Celery任务

  1. 创建Flask应用

    复制代码
    from flask import Flask, request, jsonify app = Flask(__name__
  2. 配置Celery

    复制代码
    from celery import Celery 
    
    def make_celery(app): 
        celery = Celery( 
            app.import_name, 
            broker=app.config['CELERY_BROKER_URL'], 
            backend=app.config['CELERY_RESULT_BACKEND'] 
        ) 
        celery.conf.update(app.config) 
        TaskBase = celery.Task 
        class ContextTask(TaskBase): 
            abstract = True 
            def __call__(self, *args, **kwargs): 
                with app.app_context(): 
                    return TaskBase.__call__(self, *args, **kwargs) 
        celery.Task = ContextTask 
        return celery 
    
    app.config['CELERY_BROKER_URL'] = 'redis://localhost:6379/0' 
    app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost:6379/0' 
    celery = make_celery(app)
  3. 定义上传任务

    复制代码
    from hdfs import InsecureClient 
    
    hdfs = InsecureClient('http://localhost:50070', user='your_username') 
    
    @celery.task() 
    def upload_to_hdfs(file_path, hdfs_path): 
        with open(file_path, 'rb') as f: 
            hdfs.write(hdfs_path, f, overwrite=True) 
        return f'File uploaded to {hdfs_path}'

步骤 3: 创建上传接口

  1. 定义Flask路由

    复制代码
    @app.route('/upload', methods=['POST']) 
    def upload(): 
        file = request.files['file'] if file: 
            file_path = 'temp/' + file.filename # 存储在本地临时位置 
            file.save(file_path) 
            hdfs_path = '/user/your_username/' + file.filename # HDFS路径 
            upload_to_hdfs.delay(file_path, hdfs_path) # 异步上传到HDFS 
            return jsonify({'status': 'success', 'message': 'Upload in progress'}) 
        return jsonify({'status': 'error', 'message': 'No file provided'}), 400

步骤 4: 运行应用和Celery worker

  1. 运行Flask应用

    复制代码
    FLASK_APP=your_application.py flask run --port=5000

    其中your_application.py是你的Flask应用文件。

  2. 启动Celery worker

    复制代码
    celery -A your_application.celery worker --loglevel=inf

    同样,your_application.py是你的Flask应用文件。

步骤 5: 测试上传功能

你可以使用Postman或者curl来测试上传接口:

复制代码
curl -X POST -F "file=@path_to_your_file" http://localhost:5000/uploa

确保替换path_to_your_file为你的文件路径。

以上步骤和代码示例将帮助你在Flask和Celery环境下实现异步上传文件到HDFS的功能。

相关推荐
2601_962100543 小时前
python包和模块的内容整理
python·模块·导入·虚拟环境·
二进制漫游记3 小时前
FastAPI项目集成 Qdrant向量数据库+阿里云Embedding完整实战(工具封装+业务调用)
数据库·python·阿里云·embedding
-今昭-4 小时前
《V2V 迁移实战:将 VMware 虚拟机转为 OpenStack 可用 Glance qcow2 镜像》
开发语言·python
2601_962381584 小时前
【转】Python渗透测试工具:sqlmap
python·渗透测试·sql注入·sqlmap·数据库安全
用户3721574261354 小时前
如何使用 Python 从 Word 文档中提取图片
python
白山编程大哥6 小时前
Java 集合算法:从排序、查找到底层原理的实战指南
java·python·算法
昭昭日月明7 小时前
RAGFlow 入门,不用从零造轮子
python·ai编程
莓有烦恼吖8 小时前
Vibe Coding 的一些思考
python
小白学大数据8 小时前
超简单:用 Python 让 Excel 飞起来:用 openpyxl 把重复报表整理交给脚本
开发语言·数据库·python·excel
爱丶不疚8 小时前
写给前端工程师的现代 Python 工程化最佳实践:从 pnpm 到 uv,从 CommonJS 到 src-layout
javascript·python·typescript