我有一个Python类,名为Brish
。这个类需要时间来初始化,并且可以回答查询alabrish.z("QUERY HERE")
。我想为我的本地机器创建一个微服务,该服务通过RESTHTTPneneneba API接受查询,并使用工作池的负载平衡(固定容量为4个Brish实例(来回答这些查询。我希望这些工作程序是多进程的,这样他们就可以充分利用可用的CPU核心。我应该使用什么库/设计模式?
我曾与Scala的Akka合作过,我对演员模式很熟悉。我看了multiprocessing.Pool
、Ray
、Pykka
和aioprocessing
,但在看了大约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}