2016-09-10 28 views
0

我使用这里描述http://www.tornadoweb.org/en/stable/guide/running.html龙卷风多个进程:创建多个MySQL连接

服务器连接到本地MySQL实例(server.start(n))的第一方法运行在多个流程龙卷风HTTPS服务器我想每个Tornado进程都有一个独立的MySQL连接。

但是,根据SHOW PROCESSLIST的输出,我现在只有一个MySQL连接。我想这是因为我在调用server.start(n)和IOLoop.current()。start()之前建立连接?

我真的不明白的是在调用server.start(n)之后创建的进程是共享某些数据(例如,同一模块内的全局变量)还是完全独立的。

我应该在调用server.start(n)之后建立连接吗?或者在调用IOLoop.current()。start()之后?如果我这样做,我会在每个Tornado进程中使用一个MySQL连接吗?

感谢

回答

1

每个子进程获取父进程存在时start(n)被称为变量的副本。对于连接等事情,这通常会导致问题。使用多进程模式时,尽可能少地执行子进程是很重要的,因此直到start(n)(但在IOLoop.start(); IOLoop.start()直到服务器停止后才返回)之前不要创建mysql连接。

+1

最后我选择了Tornado网站上推荐的解决方案,即将nginx作为反向代理放置在多个Tornado进程之前。这给了我能够以零停机时间进行更新的宝贵优势。 – pAkY88