如何在基于pythonklein的webservice中使用多核

2024-10-01 07:50:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个基于Klein框架的web服务

https://klein.readthedocs.io/en/latest/index.html

在这个阶段,我正在对我的服务进行压力测试,它可以在amazont2.medium实例上每秒处理大约70个请求。但是当我使用top检查服务器时,它只使用100%的CPU。我认为amazont2.medium实例应该有2个cpu,所以我想知道是否有办法更改我的web服务代码,以使用所有可能的cpu,并希望能够处理更多的请求。在

我阅读了python文档并找到了multiprocessing模块,但我不确定这是否是正确的解决方案。现在我的web服务的主要功能是

APP = Klein()
if __name__ == "__main__":
    APP.run("0.0.0.0", SERVER_PORT)

有没有一个直接的解决方案,使这个服务能够使用多个cpu来处理传入的请求?谢谢你阅读这个问题。在


Tags: 实例httpsio框架webappreadthedocscpu
1条回答
网友
1楼 · 发布于 2024-10-01 07:50:32

当然可以使用multiprocessing,而且它肯定很容易启动进程。在

from multiprocessing import Process
from klein import Klein

def runserver(interface, port, logFile):
    app = Klein()
    @app.route('/')
    def heyEarth(request):
        return 'Hey Earth!'
    app.run(interface, port, logFile)

process_list = []
for x, port in enumerate([8000, 8001, 8002, 8003]):
    logfilename = open('localhost' + str(port) + '.log', 'a')
    process_list.append(Process(target=runserver, args=('localhost', port, logfilename)))
    process_list[x].daemon = True
    process_list[x].start()

process_list.pop().join()

在企业环境中,在nginx这样的专用负载平衡器后面运行会更好、更可靠。所以上面的代码片段应该只用于启动web服务器,然后所有的负载平衡都应该由一个专用的负载平衡器来处理。在

将多进程代码保持在最低限度,否则诸如调试和共享系统文件等基本工作开始变得烦人。这就是“正常”的东西,会出现大量的异常,没有人能够帮助你,因为你自己不知道发生了什么。就在运行这个片段时,我注意到一些奇怪的信号和扭曲的东西。我想如果我运行runserver()中的所有klein导入,就可以解决这个问题。在

获取信息,从别人的错误中吸取教训,留意那些被multiprocessing烧过的人的警告,然后去做一个非常棒的应用程序!希望这有帮助:D

参考文献

相关问题 更多 >