Tornado 多进程:创建多个 MySQL 连接
Tornado multiple processes: create multiple MySQL connections
我是 运行 跨多个进程的 Tornado HTTPS 服务器,使用此处描述的第一种方法 http://www.tornadoweb.org/en/stable/guide/running.html (server.start(n))
服务器连接到本地 MySQL 实例,我希望每个 Tornado 进程有一个独立的 MySQL 连接。
但是,根据 SHOW PROCESSLIST 的输出,现在我只有一个 MySQL 连接。我猜这是因为我在调用 server.start(n) 和 IOLoop.current().start() 之前建立了连接,对吗?
我不太明白调用server.start(n)后创建的进程是否共享一些数据(例如,同一模块中的全局变量)或完全独立。
我应该在调用 server.start(n) 之后建立连接吗?或者在调用 IOLoop.current().start() 之后?如果我这样做,每个 Tornado 进程是否会有一个 MySQL 连接?
谢谢
调用 start(n)
时,每个子进程都会获得父进程中存在的变量的副本。对于连接之类的事情,这通常会导致问题。使用多进程模式时,在启动子进程之前尽可能少地执行操作很重要,因此在 start(n)
之后(但在 IOLoop.start()
之前)不要创建 mysql 连接;IOLoop.start()
不会 return 直到服务器停止)。
我是 运行 跨多个进程的 Tornado HTTPS 服务器,使用此处描述的第一种方法 http://www.tornadoweb.org/en/stable/guide/running.html (server.start(n))
服务器连接到本地 MySQL 实例,我希望每个 Tornado 进程有一个独立的 MySQL 连接。
但是,根据 SHOW PROCESSLIST 的输出,现在我只有一个 MySQL 连接。我猜这是因为我在调用 server.start(n) 和 IOLoop.current().start() 之前建立了连接,对吗?
我不太明白调用server.start(n)后创建的进程是否共享一些数据(例如,同一模块中的全局变量)或完全独立。
我应该在调用 server.start(n) 之后建立连接吗?或者在调用 IOLoop.current().start() 之后?如果我这样做,每个 Tornado 进程是否会有一个 MySQL 连接?
谢谢
调用 start(n)
时,每个子进程都会获得父进程中存在的变量的副本。对于连接之类的事情,这通常会导致问题。使用多进程模式时,在启动子进程之前尽可能少地执行操作很重要,因此在 start(n)
之后(但在 IOLoop.start()
之前)不要创建 mysql 连接;IOLoop.start()
不会 return 直到服务器停止)。