Python Web服务器(CherryPy)在AWS上扩展并发请求
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python Web服务器(CherryPy)在AWS上扩展并发请求,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2997字,纯文字阅读大概需要5分钟。
内容图文
![Python Web服务器(CherryPy)在AWS上扩展并发请求](/upload/InfoBanner/zyjiaocheng/786/5f7ed809ce504925b160c6e00761399d.jpg)
出于好奇,我把一个简单的CherryPy服务器与下面的代码放在一起,睡眠时间为5秒(作为模拟处理延迟),然后返回一个简单的’hello’.
import cherrypy
import time
class server_runner(object):
@cherrypy.expose
def api(self, url):
time.sleep(5)
return "hello"
if __name__ == '__main__':
cherrypy.server.socket_host = '0.0.0.0'
cherrypy.quickstart(server_runner())
我运行了一个简单的负载测试(结果在这里http://i.imgur.com/LUpEtFL.png),应用程序似乎在响应时间(蓝色)保持一致,直到第27个活动用户(绿线显示活动用户计数):响应时间快速升级.如果在没有重大延迟的情况下无法处理27个用户,我对CherryPy如何被标记为“生产就绪”服务器感到困惑.我的实施或理解是否有问题?这是在C3大型Ec2实例上运行的.
解决方法:
在简单的情况下,您只需管理server.thread_pool配置参数,就像在问题的评论中提到的那样.
在实际情况中,它取决于许多因素.但我可以肯定地说,CherryPy是一个线程服务器,由于Python GIL,一次只运行一个线程.对于IO绑定工作负载来说可能不是一个大问题,尽管你可以利用你的CPU核心运行同一应用程序的许多CherryPy进程.它可能会规定一些设计决策,例如避免进程内缓存,并且通常遵循无共享体系结构,因此您的进程可以互换使用.
拥有许多应用程序实例会使维护变得更加复杂,因此您应该考虑利弊.好的,下面的示例可以为您提供一些线索.
mp.py – CherryPy应用程序
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import cherrypy
class App:
@cherrypy.expose
def index(self):
'''Make some traffic'''
return ('Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean quis laoreet urna. '
'Integer vitae volutpat neque, et tempor quam. Sed eu massa non libero pretium tempus. '
'Quisque volutpat aliquam lacinia. Class aptent taciti sociosqu ad litora torquent per '
'conubia nostra, per inceptos himenaeos. Quisque scelerisque pellentesque purus id '
'vulputate. Suspendisse potenti. Vestibulum rutrum vehicula magna et varius. Sed in leo'
' sit amet massa fringilla aliquet in vitae enim. Donec justo dolor, vestibulum vitae '
'rhoncus vel, dictum eu neque. Fusce ac ultrices nibh. Mauris accumsan augue vitae justo '
'tempor, non ullamcorper tortor semper. ')
cherrypy.tree.mount(App(), '/')
srv8080.ini – 第一个实例配置
[global]
server.socket_host = '127.0.0.1'
server.socket_port = 8080
server.thread_pool = 32
srv8081.ini – 第二个实例配置
[global]
server.socket_host = '127.0.0.1'
server.socket_port = 8081
server.thread_pool = 32
proxy.conf – nginx config
upstream app {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://app;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
将mp.py和* .ini放在目录中.添加* .conf到nginx的网站启用,重新加载它.在两个终端中使用mp.py打开目录.然后先运行cherryd -e production -i mp -c ./srv8080.ini,其次是cherryd -e production -i mp -c ./srv8081.ini.
现在你可以玩了.我在我的开发机器上运行以下命令(Linux Mint 15,Core i5 x2 HT).
ab -c 1 -n 12800 -k http://127.0.0.1:8080/ # ~1600 rps
ab -c 16 -n 12800 http://127.0.0.1:8080/ # ~400 rps
ab -c 32 -n 12800 http://127.0.0.1/ # ~1500 rps
内容总结
以上是互联网集市为您收集整理的Python Web服务器(CherryPy)在AWS上扩展并发请求全部内容,希望文章能够帮你解决Python Web服务器(CherryPy)在AWS上扩展并发请求所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。