【问题标题】:Python - Status of long running process (possibility for multiple processes)Python - 长时间运行进程的状态(多个进程的可能性)
【发布时间】:2021-03-02 15:29:10
【问题描述】:

我已经使用 Python 和 FastAPI 构建了一个 API。使用这个 API,我的目标是训练自定义 spaCy NLP 模型。

这是我的代码:

'''
main.py
'''
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import subprocess
import sys

app = FastAPI()

class Project(BaseModel):
    token: str

def run_task(cmd, project_path):
    process = subprocess.Popen(cmd, cwd=project_path, shell=True, bufsize=1, universal_newlines=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    return process


@app.post("/project/train")
async def main(project: Project):
    project_path = '/'.join(["textcat", "projects", project.token]) 
    process = run_task("python -u -m spacy project run all", project_path)
    

    return {
        "status": "success",
        "process_id" : process.pid
    }  

我通过运行来运行应用程序:

python -m uvicorn main:app

然后,我使用以下正文触发 POST 请求:http://127.0.0.1:8000/project/train

{
   "token":"1234"
}

我正在触发python -m spacy project run all 的子进程基本上是在运行spaCy workflow,这可能需要相当长的时间(小时)才能完成。

假设,在我的团队中,我们是两个用户,每个人都想训练一个自定义模型 - 这意味着我们都会向 API 发送请求(使用不同的项目令牌),并触发 NLP 模型的训练。

有没有办法可以查询正在运行的进程以获取每个进程的输出/进度?

【问题讨论】:

    标签: python python-3.x spacy fastapi spacy-3


    【解决方案1】:

    我看到了两种方法:

    • 在文本文件中记录您的进度
    • 在数据库中记录您的进度

    在任何情况下,您都必须将其写在磁盘上的某个位置,而不是在内存中,这样,万一应用程序意外停止,您仍然可以知道您的工作在哪里停止。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多