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

相关推荐
从零开始学习人工智能8 小时前
【踩坑实录】WSL2 解决 onnxruntime\-gpu ImportError: libcudart\.so\.13 无 CUDA13 运行库问题
python
卷无止境9 小时前
在 awesome-fastapi 里,哪些库值得一看?
后端·python
zhanghaha13149 小时前
Python进阶教程:6_JSON 数据解析 —— 新手完全指南
开发语言·python·json
Python私教9 小时前
API 输出模型怎么设计:从 model_dump() 到显式展示层
python·fastapi
Python私教10 小时前
本地 AI 工具服务该绑定 127.0.0.1 还是 0.0.0.0?
python·fastapi
卷无止境10 小时前
FastAPI 的Admin面板生态
后端·python
ctlover11 小时前
Streamlit 框架
python
ι:11 小时前
MATLAB 与 Python 搭建无人机地面站:优势、劣势与选型逻辑
python·matlab·无人机
船厂电气自动化ai大模型11 小时前
AI大模型与数学 第32课 函数凹凸性与二阶导数:拐点求解、凹凸区间计算(10道二阶导数计算题)
数据结构·人工智能·python·深度学习·算法
jufeng130711 小时前
【系列:手搓自主 AI Agent:Hermes 架构原理剖析 · 第 7 篇】
python·ai agent·权限系统