tornado: process.py

其实process.py里面只有一个重头fork_processes

 

看到这里其实源自看到netutil里面的TCPServer.start方法:“可以根据参数启动多个tornado进程”,start方法的源代码如下(注释已去):

 

def start(self, num_processes=1):
        assert not self._started
        self._started = True
        if num_processes != 1:
            process.fork_processes(num_processes)
        sockets = self._pending_sockets
        self._pending_sockets = []
        self.add_sockets(sockets)

 

 

fork_processes做了三件事:

  1. 根据传入的参数,fork出相应数量的子进程并在子进程中继续执行接下来的代码(TCPServer)
  2. 在主进程中,维护一个无限循环,监听所有子进程的状态,一旦发现子进程挂掉了(因为异常,或者错误的返回),则立即重新fork一个新的子进程
  3. 当所有子进程全部干净的退出后,退出主进程

在这里发现一个和之前网上查到的评论不一致的地方,那就是我现在看到的tornado的版本2.4.1,是支持子进程异常退出后自动重启的。

 

同时也看到一个困惑的地方,就是针对于同一批socket链接,在多进程的情况下会有N>1个handler会响应,不知道会不会有什么冲突?等看看IOLoop再回来看看。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值