我正在编写一个基于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来处理传入的请求?感谢您阅读此问题。
答案 0 :(得分: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服务器,然后所有负载均衡应由专用负载均衡器处理。
将多进程代码保持在最低限度,否则调试和共享系统文件等基本内容就会变得烦恼。这就是“正常”的东西,有很多异常可能出现,没有人能够帮助你,因为你不知道自己发生了什么。只是运行这个片段,我注意到一些奇怪的信号和扭曲的东西。如果我在klein
中运行所有runserver()
次导入,我认为可以修复。
了解情况,从其他错误中吸取教训,留意那些被multiprocessing
焚烧的人的警告,然后去做一个踢屁股的应用!希望这会有所帮助:D