测试tornado的多进程性能tornado.process

一直在线上使用nginx tornado多实例的部署方式,在看tornado源码的时候,看到 tornado.process 多进程逻辑。  

该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新。http://xiaorui.cc/?p=105


随后测试了下tornado的 tornado.process模块,  结果性能方面不咋地。  他的实现原理也很简单,就是主进程实例化listen fd,然后fork子进程,这样子进程继承了父进程的listen fd .  当一个新连接过来的时候,多个子进程如果都在accept,那么会出现惊群操作,当然最后只有一个进程accept拿到数据。

每个子进程有单独的epoll池里,不仅要监控listen fd,而且要监控 已经建连的连接。

另外,tornado多进程的性能咋样?  不怎么样…. 也就用用…

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os
import time

import tornado.web
import tornado.httpserver
import tornado.ioloop
import tornado.netutil
import tornado.process
from tornado.options import define,options


define("port",default=8001, help="run on the given port", type=int)
class LongHandler(tornado.web.RequestHandler):

    def get(self):
        time.sleep(3)
        self.write(str(os.getpid()))
                                                                     

if __name__ == "__main__":
    tornado.options.parse_command_line()
    app = tornado.web.Application(([r'/', LongHandler], ))
    sockets = tornado.netutil.bind_sockets(8090)
    tornado.process.fork_processes(100)
    server = tornado.httpserver.HTTPServer(app)
#    server.listen(options.port)
    server.add_sockets(sockets)
    tornado.ioloop.IOLoop.instance().start()
                                                                     

END.


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc

发表评论

邮箱地址不会被公开。 必填项已用*标注