3

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

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

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

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

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

是否有直接的解决方法使该服务能够使用多个 cpu 来处理传入的请求?感谢您阅读问题。

4

1 回答 1

2

它当然是可以使用的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 服务器,然后你的所有负载平衡都应该由专用的负载平衡器处理。

将多进程代码保持在最低限度,否则诸如调试和共享系统文件之类的基本事情就会开始变得烦人。这就是“正常”的事情,可能会出现大量异常,没有人能帮助你,因为你自己不知道发生了什么。只是运行这个片段,我注意到一些奇怪的信号和 Twisted。我认为如果我kleinrunserver().

了解情况,从别人的错误中吸取教训,留意那些被烧死的人的警告,multiprocessing然后去做一个踢屁股的应用程序!希望这会有所帮助:D

参考

于 2016-09-08T12:55:10.150 回答