Уведомления

Группа в Telegram: @pythonsu

#1 Май 5, 2015 18:11:20

Avi
Зарегистрирован: 2013-04-18
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Бесконечный цикл в Gunicorn процессе

Добрый день форумчане!
Помогите решить проблему. Не понимаю где кроется косяк.

Задача следующая:
Есть высоконагруженное приложение использующее Gunicorn в качестве веб-сервера. Мне нужно снимать данные с переменных которые меняются внутри выполняемых процессов. Данные не являются критически важными. Скорее являются статистическими для отладки и доработки приложения.
Параллельно у меня работает 129 процессов (сервер Quad на 64 ядра). Каждое обрабатывает параллельно десятки соединений.

Решение:
Я хотел обозначить в каждом процессе глобальную переменную в виде листа, куда бы складывал данные при выполнении тех или иных событий. Например: a +=1.
Далее нужно как-то эти данные сливать дальше для обработки. Я хотел перекладывать их в Memcache раз в секунду. Для этого в каждом процессе выполнил Greenlet.spawn(self.cycle) где cycle представляет собой бесконечный цикл:

    def cycle(self):
        while True:
            self.write_data()
            sleep(1)
В цикле write_data() перекладывает данные из локальный переменных в Memcache и зануляет их.

Проблема:
Цикл выполняется несколько раз и перестает выполняться. Когда приложение продолжает нормально функционировать.
Почему так происходит? Ведь процесс продолжает работать. Соответственно и цикл должен выполняться до тех пор пока существует процесс?

Спасибо.

Офлайн

#2 Май 6, 2015 16:48:47

Avi
Зарегистрирован: 2013-04-18
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Бесконечный цикл в Gunicorn процессе

Сам спросил, сам и отвечу.
Нельзя делать использовать общие переменные между потоками Gunicorn'а. Даже простейшие счетчики. Не говоря уже о классе, который сливает в Memcache отчет из потока.
Предполагаемый подход решение задачи был в корне не совместим с архитектурой написания многопоточного приложения на базе Gunicorn + Gevent.

https://groups.google.com/forum/#!topic/pylons-discuss/uTd5PIbRDps

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version