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的功能。

相关推荐
默_笙3 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
qq_426003963 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫3 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
长沙三为智能科技3 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
伞伞悦读3 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
只睡四小时3 天前
Canvas 弹道联机实战:700 行 + 固定时间步长
python·websocket·html5·游戏开发·canvas
奇思妙想聪明勤奋的小羊3 天前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型
lpfasd1233 天前
2026年第38周GitHub趋势周报
python·科技·github
IZero073 天前
Jev 与 Laya
python·语言模型