2016-09-10 4 views
0

Я бегу сервер Торнадо HTTPS через несколько процессов с использованием первого метода, описанного здесь http://www.tornadoweb.org/en/stable/guide/running.html (server.start (п))Торнадо несколько процессов: создание нескольких соединений MySQL

Сервер подключается к локальному экземпляру MySQL и я хотел бы иметь независимое соединение MySQL для процесса Tornado.

Однако, сейчас у меня есть только одно соединение MySQL в соответствии с выходом SHOW PROCESSLIST. Я предполагаю, что это происходит, потому что я устанавливаю соединение перед вызовом server.start (n) и IOLoop.current(). Start() правильно?

Что я действительно не понимаю, являются ли процессы, созданные после вызова server.start (n), обмениваться некоторыми данными (например, глобальными переменными в одном модуле) или полностью независимы.

Должен ли я установить соединение после вызова server.start (n)? Или после вызова IOLoop.current(). Start()? Если я это сделаю, у меня будет одно соединение MySQL для процесса Tornado?

Благодаря

ответ

1

Каждый дочерний процесс получает копию переменных, которые существовали в родительском процессе, когда start(n) называли. Для таких вещей, как соединения, это обычно вызывает проблемы. При использовании многопроцессного режима важно как можно меньше сделать до начала дочерних процессов, поэтому не создавайте соединения mysql до start(n) (но до IOLoop.start(); IOLoop.start() не возвращается, пока сервер не будет остановлен).

+1

В конце концов я выбрал решение, рекомендованное на веб-сайте Tornado, которое ставит nginx как обратный прокси-сервер перед несколькими процессами Tornado. Это дает мне ценное преимущество - возможность делать обновления с нулевым временем простоя. – pAkY88

Смежные вопросы