我发现了如何用多进程执行龙卷风。
server = HTTPServer(app)
server.bind(8888)
server.start(0) #Forks multiple sub-processes
IOLoop.current().start()
在这种情况下,有没有办法通过流程共享资源?
它似乎在进程上使用相同的端口。
龙卷风在每个过程中都能平衡负载吗?
如果是这样,它是怎么做的?
通常,当使用多进程模式时,进程仅通过外部服务进行通信:数据库、缓存服务器、消息队列等。对于在同一台机器上运行的进程,还有一些附加选项可用(请参阅multiprocessing
模块`),但总的来说,一旦你不再使用单一的过程,最好寻找在你超越单一机器时会继续扩展的技术。
在这种情况下,是内核而不是Tornado在进程之间进行负载平衡。理论上,这是一种自校正机制,因为新连接只会在连接到达时提供给空闲的进程。然而,在实践中,这往往会导致严重的不平衡(负载最多的进程的连接数是负载最少的进程的2-3倍),因此专用的负载平衡代理将导致更均匀的分布。