V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
moguizhong
V2EX  ›  问与答

Python 程序如何部署啊?

  •  
  •   moguizhong · 2023-09-05 08:08:51 +08:00 · 2859 次点击
    这是一个创建于 449 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想实现网站中上传音频文件,上传到服务器后,用 python 处理这个音频,这个 python 程序要怎么部署呢?后端用 node 处理,如何告诉 python 要执行了呢?

    20 条回复    2023-09-06 14:17:00 +08:00
    alexsz
        1
    alexsz  
       2023-09-05 08:15:11 +08:00
    服务器正常安装 python 、创建 python 虚拟环境,安装程序依赖
    后端 node 保存好前端上传的文件后,可以调用 node 的 child_process 来执行 python 命令
    Bronya
        2
    Bronya  
       2023-09-05 08:34:56 +08:00
    试试 pm2 ?虽然是给 node 的进程管理工具,但是 python 好像也支持。
    flowerains
        3
    flowerains  
       2023-09-05 08:44:21 +08:00
    pm2 还能管理 python 进程?
    感觉又涨知识了
    Donahue
        4
    Donahue  
       2023-09-05 08:48:09 +08:00
    docker 部署, http 请求告诉 python 需要处理的文件在哪里
    tgcdz
        5
    tgcdz  
       2023-09-05 08:50:12 +08:00
    @flowerains 不仅仅是 node ,只要是命令行程序都行,我就在用 pm2 管理 go 服务、C++文件服务器这些,贼好用
    hanyu2pomelo
        6
    hanyu2pomelo  
       2023-09-05 09:02:48 +08:00
    写个接口 http 调一下
    leconio
        7
    leconio  
       2023-09-05 09:13:52 +08:00 via iPhone
    为何不考虑弄个云函数,上穿到 oss 后给云函数个回调。只需关注代码即可
    weidaizi
        8
    weidaizi  
       2023-09-05 09:17:29 +08:00
    两种方法
    1. pyinstaller 打包成可执行文件,然后部署
    2. docker 打成镜像,要用的时候拉起来
    paopjian
        9
    paopjian  
       2023-09-05 09:18:58 +08:00
    python 开个 fastapi/flask/Django 服务,用 supervisord 保护服务进程
    node 获取音频后发送给 python 请求进行执行
    zhangxh1023
        10
    zhangxh1023  
       2023-09-05 09:19:53 +08:00
    python 写个 web 服务。。。node 通过 http 调用。。。。
    xiyou007
        11
    xiyou007  
       2023-09-05 09:24:41 +08:00   ❤️ 1
    最简单的 python 自动轮训查看指定文件夹的文件, 有处理,没有就 sleep
    shawnbluce
        12
    shawnbluce  
       2023-09-05 09:28:23 +08:00
    1. 将 Python 维持脚本状态,每次用 node 走命令行调用
    2. 将 Python 做成 web 服务仅监听 127.0.0.1 ,每次发起一个请求告知 Python 去处理哪个
    liuxingdeyu
        13
    liuxingdeyu  
       2023-09-05 10:11:10 +08:00
    多简单,整个死循环,等队列或者读文件夹,放个容器里跑着呗
    itskingname
        14
    itskingname  
       2023-09-05 10:15:27 +08:00
    使用消息队列。

    1. Python 一直运行监控消息队列。
    2. 后端收到文件以后,放到一个文件夹下面,获得文件路径
    3. 把其他元信息(例如上传时间、文件名、处理参数等等),加上文件路径,转成 JSON ,发送到消息队列
    4. Python 处理完成以后,调用后端某个接口,告诉后端已经处理完成了。
    5. 返回数据给用户。
    lipcao
        15
    lipcao  
       2023-09-05 10:32:10 +08:00
    @itskingname 多个模块 入口是 kafka 消费者 请问这种咋部署啊?
    Waverly
        16
    Waverly  
       2023-09-05 11:02:56 +08:00
    之前用过 fastapi 直接向服务器发送请求,返回 json ,但是对于负载多的场景要另做优化了
    iku
        17
    iku  
       2023-09-05 13:15:11 +08:00
    chatgpt 答案很全呀

    要实现网站中上传音频文件并在服务器上使用 Python 处理该音频,你可以按照以下步骤进行部署:

    1. 配置服务器环境:首先,确保服务器上已经安装了 Python 运行环境和所需的音频处理库或工具。你可以使用包管理工具如 pip 来安装所需的 Python 库。

    2. 编写音频处理程序:使用 Python 编写处理音频的程序。这个程序可以使用 Python 的音频处理库(如 librosa 、pydub 等)来读取、分析和处理音频文件。确保你的程序可以接受音频文件作为输入,并进行相应的处理操作。

    3. 创建后端接口:在 Node.js 的后端代码中,你可以使用框架如 Express 来创建一个接受音频文件上传请求的路由。当用户上传音频文件时,后端会将音频文件保存到服务器的指定目录中。

    4. 调用 Python 程序:在 Node.js 后端的路由处理函数中,可以使用 Child Process 模块来调用 Python 程序。Child Process 模块允许你在 Node.js 中执行外部命令,包括执行 Python 脚本。你可以使用 `child_process.spawn()` 或 `child_process.exec()` 方法来调用 Python 程序,并将上传的音频文件作为参数传递给 Python 程序。

    5. 处理结果返回给前端:在 Python 程序完成音频处理后,可以将处理结果保存到服务器上的指定位置,并将结果的路径或其他相关信息返回给 Node.js 后端。后端可以将这些信息组织成 JSON 格式的数据,并通过响应返回给前端。

    通过以上步骤,你可以实现在网站中上传音频文件,并通过 Node.js 后端调用 Python 程序进行处理。请注意确保服务器上的安全性和权限设置,以及对上传的音频文件进行合适的验证和处理,以防止安全漏洞和潜在的问题。

    除了使用 Node.js 后端调用 Python 程序处理音频文件之外,还有其他一些解决方案,具体取决于你的需求和技术栈。以下是一些备选方案:

    直接使用 Python 后端:如果你的后端已经是使用 Python 编写的,你可以直接在 Python 后端处理音频文件,而无需引入 Node.js 。在 Python 后端中,你可以使用框架如 Flask 或 Django 来处理上传文件的请求,并使用相应的音频处理库进行处理。

    使用消息队列:你可以使用消息队列(如 RabbitMQ 、Apache Kafka 等)来处理上传的音频文件。当用户上传音频文件时,将文件信息发送到消息队列中,并有一个独立的 Python 消费者程序监听队列,负责处理音频文件。这种方式可以实现解耦和异步处理,提高系统的可伸缩性和并发性。

    使用云服务:考虑使用云服务提供商的相关服务来处理音频文件。例如,你可以使用云存储服务(如 AWS S3 、Google Cloud Storage 等)来存储上传的音频文件,并使用云函数(如 AWS Lambda 、Google Cloud Functions 等)来触发和执行 Python 函数进行音频处理。

    这些方案都有各自的优势和适用场景。你可以根据项目需求、团队技术栈和资源预算来选择适合的方案。无论选择哪种方案,都需要注意文件上传的安全性和合法性验证,以及对处理过程中的异常情况进行适当处理和错误处理。
    superchijinpeng
        18
    superchijinpeng  
       2023-09-05 13:21:30 +08:00
    docker
    julyclyde
        19
    julyclyde  
       2023-09-06 11:53:20 +08:00
    @Bronya
    @flowerains
    @tgcdz
    @paopjian
    @shawnbluce

    建议不要用 pm2/supervisord 之类的,因为虽然它能提供管理进程和故障重启的能力,但其对自身的存活却缺乏保障能力

    建议用容器或者 systemd
    cooolr
        20
    cooolr  
       2023-09-06 14:17:00 +08:00
    感觉 python 的项目工程化极差。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3414 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 11:28 · PVG 19:28 · LAX 03:28 · JFK 06:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.