首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:创建一个使用多进程工作池来回答查询的微服务

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

Stack Overflow用户
提问于 2020-07-26 20:51:41
回答 2查看 159关注 0票数 1

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

我曾经使用过Scala的Akka,并且我熟悉演员模型。我看过multiprocessing.PoolRayPykkaaioprocessing,但在我花了大约2个小时查看他们的文档后,我仍然不知道他们中的哪一个是我需要的工具。

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

EN

回答 2

Stack Overflow用户

发布于 2020-07-26 20:58:08

您可以使用concurrent.futures,它允许您创建进程池。进程数可以设置为可用核的数量,也可以设置为所需的数量。

这里有一个令人惊叹的video,它解释了如何使用这个模块。

我建议你先看上面的视频,然后再看docs

票数 0
EN

Stack Overflow用户

发布于 2020-07-26 22:45:34

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

代码语言:javascript
复制
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}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63100388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档