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请求等待。
我怎么能不限制货叉的数量?
谢谢!
答案 0 :(得分:1)
没有选项来分叉无限数量的子进程。文档说明了这一点:
如果num_processes为None或< = 0,我们检测核心数 可以在这台机器和fork上运行多个子进程。如果 给出num_processes并且> 1,我们叉具体数量 子处理。
如果您愿意,可以指定一些较高的数字,但我认为您发现在某个点上不超过系统核心数量,它会开始损害性能。
龙卷风真的不是以需要分支许多子进程的方式运行的。 Tornado的一个主要功能是异步I / O,它允许它处理超过num_proccesses
个并发连接数。例如,如果您使用non-blocking sleep替换A控制器中sleep(9999)
的呼叫,您几乎可以立即处理所有连接成为B控制器。