2014-01-18 2 views
0

В настоящее время я запускаю приложение python с помощью Tornado Webserver. Я использую Supervisord для запуска 4 экземпляров Tornado на разных портах. Перед ними я запускаю Nginx для балансировки нагрузки между серверами.Python: Обмен данными между экземплярами

Проблема в том, что я реализовал длинный опрос, что означает, что мне нужно, чтобы данные делились между различными экземплярами Tornado.

Насколько я понимаю, когда пользователь отправляет запрос, он подключается к одному из экземпляров торнадо, но обратный вызов сохраняется только в этом единственном экземпляре, и данные, которые будут нажаты, будут только переадресованы на обратные вызовы в одном экземпляре ,

Как делиться обратными вызовами между экземплярами? Я играл с Redis, проблема в том, как я сохраняю обратные вызовы в магазине ключей? Есть ли более простой способ? Или как мне это сделать в Redis?

Я смотрел на эту тему, но они на самом деле не дают мне полный ответ:

Sharing data between multiple tornado instances

Спасибо!

ответ

1

Вы не можете поместить обратные вызовы в redis. Вместо этого вы помещаете данные в redis, и каждый процесс считывает эти данные и передает их вместе со своими обратными вызовами.

+0

Хорошо, спасибо, это имеет смысл. Поэтому мне нужно создать что-то, чтобы другие процессы знали, когда есть новые данные в Redis или в конкретной области/канале, на который они смотрят? И затем они берут данные и отправляют их своим обратным вызовам, не так ли? – ReturnToZero

+0

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

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