tornado webserver无限子进程分叉

时间:2014-05-29 20:47:23

标签: python webserver tornado

http://tornado.readthedocs.org/en/latest/tcpserver.html#tornado.tcpserver.TCPServer.start

http://tornado.readthedocs.org/en/latest/httpserver.html

server = HTTPServer(app)
server.bind(8888)
server.start(0)  # Forks multiple sub-processes
IOLoop.instance().start()

当我在server.start()中设置0时,tornado会分叉最多X个子进程(其中X等于机器核心数,在我的情况下我有4个。)

为了测试它,我有两个控制器,一个控制器(A)带睡眠(9999),另一个快速控制器(B)只返回“你好世界”

当我向控制器A发出3个并发请求时,+向B控制器发出一个请求,一切正常,返回“hello world”。

但是当我向控制器A发出4个并发请求时,+向B控制器发出一个请求,B请求等待。

我怎么能不限制货叉的数量?

谢谢!

1 个答案:

答案 0 :(得分:1)

没有选项来分叉无限数量的子进程。文档说明了这一点:

  

如果num_processes为None或< = 0,我们检测核心数   可以在这台机器和fork上运行多个子进程。如果   给出num_processes并且> 1,我们叉具体数量   子处理。

如果您愿意,可以指定一些较高的数字,但我认为您发现在某个点上不超过系统核心数量,它会开始损害性能。

龙卷风真的不是以需要分支许多子进程的方式运行的。 Tornado的一个主要功能是异步I / O,它允许它处理超过num_proccesses个并发连接数。例如,如果您使用non-blocking sleep替换A控制器中sleep(9999)的呼叫,您几乎可以立即处理所有连接成为B控制器。