我已经使用 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 模型的训练。
有没有办法可以查询正在运行的进程以获取每个进程的输出/进度?