Помогите решить проблему. Не понимаю где кроется косяк.
Задача следующая:
Есть высоконагруженное приложение использующее Gunicorn в качестве веб-сервера. Мне нужно снимать данные с переменных которые меняются внутри выполняемых процессов. Данные не являются критически важными. Скорее являются статистическими для отладки и доработки приложения.
Параллельно у меня работает 129 процессов (сервер Quad на 64 ядра). Каждое обрабатывает параллельно десятки соединений.
Решение:
Я хотел обозначить в каждом процессе глобальную переменную в виде листа, куда бы складывал данные при выполнении тех или иных событий. Например: a +=1.
Далее нужно как-то эти данные сливать дальше для обработки. Я хотел перекладывать их в Memcache раз в секунду. Для этого в каждом процессе выполнил Greenlet.spawn(self.cycle) где cycle представляет собой бесконечный цикл:
def cycle(self): while True: self.write_data() sleep(1)
Проблема:
Цикл выполняется несколько раз и перестает выполняться. Когда приложение продолжает нормально функционировать.
Почему так происходит? Ведь процесс продолжает работать. Соответственно и цикл должен выполняться до тех пор пока существует процесс?
Спасибо.