1

我已经使用 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 工作流,这可能需要相当长的时间(数小时)才能完成。

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

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

4

1 回答 1

0

我看到了两种方法:

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

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

于 2021-05-26T15:53:16.527 回答