Python:创建一个使用多进程工作池来回答查询的微服务



我有一个Python类,名为Brish。这个类需要时间来初始化,并且可以回答查询alabrish.z("QUERY HERE")。我想为我的本地机器创建一个微服务,该服务通过RESTHTTPneneneba API接受查询,并使用工作池的负载平衡(固定容量为4个Brish实例(来回答这些查询。我希望这些工作程序是多进程的,这样他们就可以充分利用可用的CPU核心。我应该使用什么库/设计模式?

我曾与Scala的Akka合作过,我对演员模式很熟悉。我看了multiprocessing.PoolRayPykkaaioprocessing,但在看了大约2个小时他们的文档后,我仍然不知道他们中的哪一个是我需要的工具。

PS:RESTHTTPneneneba API可以替换为我可以从bash轻松使用的任何API。

您可以使用concurrent.futures来创建进程池。进程的数量可以设置为可用的核心数量,也可以根据需要设置。

这是一个令人惊叹的视频,它解释了如何使用这个模块。

我建议你先看上面的视频,然后阅读文档

我自己找到了答案,尽管我不知道它有多bug。

from typing import Optional
from fastapi import FastAPI, Response
app = FastAPI()

import time
import brish
brishes = [brish.Brish() for i in range(4)]
@app.get("/zsh/")
def cmd_zsh(cmd: str, verbose: Optional[int] = 0):
while len(brishes) <= 0:
time.sleep(1)
myBrish = brishes.pop()
res = myBrish.z(cmd)
brishes.append(myBrish)
if verbose == 0:
return Response(content=res.outerr, media_type="text/plain")
else:
return {"cmd": cmd, "brishes": len(brishes), "out": res.out, "err": res.err, "retcode": res.retcode}

最新更新