【问题标题】:Python tornado with multi-process具有多进程的 Python 龙卷风
【发布时间】:2015-10-27 15:13:24
【问题描述】:
我找到了如何使用多进程执行龙卷风。
server = HTTPServer(app)
server.bind(8888)
server.start(0) #Forks multiple sub-processes
IOLoop.current().start()
在这种情况下,有没有办法通过进程共享资源?
而且似乎在进程上使用相同的端口。
tornado 是否平衡每个进程的负载本身?
如果是这样,它是怎么做的?
【问题讨论】:
标签:
python
tornado
python-multiprocessing
【解决方案1】:
一般来说,当使用多进程模式时,进程只通过外部服务进行通信:数据库、缓存服务器、消息队列等。对于在同一台机器上运行的进程,还有一些额外的选项可用(参见@987654321 @module`),但一般来说,一旦您不再使用单个进程,最好寻找在您超越单台机器时将继续扩展的技术。
在这种情况下,是内核而不是 Tornado 执行跨进程的负载平衡。从理论上讲,这是一种自我纠正机制,因为新连接只会被分配给在连接到达时处于空闲状态的进程。但是,在实践中,这往往会导致严重的不平衡(负载最多的进程的连接数是负载最少的进程的 2-3 倍),因此专用的负载平衡代理会导致分布更均匀。