Tornado开发(六)— 扩展

本文介绍了Tornado的多进程部署方法,包括使用tornado自带的多进程启动和Nginx负载均衡方式,并讨论了在多进程环境下如何借助Redis进行全局参数缓存,确保信息共享。同时,提供了使用Python Redis库进行缓存操作的示例代码。
摘要由CSDN通过智能技术生成

5. 多进程部署

多进程部署也有两种方式:一是利用tornado自带的启动多个进程的方式,二是利用Nignx在前面做负载均衡的方式。

tornado自带方式

测试代码如下:

class LongHandler(tornado.web.RequestHandler):
	def get(self):
		stime=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
		pid=str(os.getpid())
		self.write("<h1>[{}]:{}</h1>".format(stime,pid))
		time.sleep(10)

if __name__ == "__main__":
	app = tornado.web.Application(([r'/', LongHandler], ))
	server = tornado.httpserver.HTTPServer(app)
	server.bind(8010)
	server.start(num_processes=3)
	tornado.ioloop.IOLoop.current().start()

启动上例后,用ps可以看到启动了3个python的epoll进程,同时打开4个浏览页,可以看到3个浏览页在10秒之后返回,1个页面20秒返回,进程id显示也是3个。

这种方式下,多进程是由程序启动时自动产生的,如果需要不停服务进行系统更新,就几乎不可能了。

Nginx负载均衡方式

采用Nginx做前端的负载均衡,tornadohttp server就更简单了,实际上,它完全不知道Nginx的存在,但建议采用xheaders=True作为HTTPServer的启动参数,便于得到真正客户端的IP。这种方式也可跨机器部署。

官网上有比较完整的Nginx配置文件示例,以下是主要内容:

    upstream frontends {
        server 127.0.0.1:8000 weight=3;
        server 127.0.0.1:8001 weight=2;
        server 127.0.0.1:8002 weight=1;
    }
       location / {
            proxy_pass_header Server;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            proxy_pass http://frontends;
        }

这个配置中,Nginx将到达的http请求转发到本地的8000,8001,8002三个端口,也就是有三个Web Server分别侦听这三个端口,Nginx转发的概率(权值)分别为3,2,1。

Redis全局参数缓存

无论上面哪种方式部署,各进程间的信息(全局变量)共享都需要通过第三方来完成,此时就需要部署redis或memcached(鉴于memca

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值