Насколько я понял, проблема возникает именно с группой. То есть, Channels рассылает сообщения участникам группы сравнительно медленно и после 200-300 сообщений рассылающая корутина отваливается по таймауту в 10 секунд.
Каков вообще предел одновременных подключений к Channels трудно сказать, мы в него не успели упереться.
Кстати, Андрей Светлов на PiterPy говорил, что вообще ASGI это костыль и он по своей архитектуре в принципе не может работать быстро. Хотя и отметил, что это неплохое решение для Django из коробки для тех, у кого нет больших нагрузок.
In general I wouldn't recommend Channels groups for any sort of large-scale work — you should probably roll your own solution if you have more than about 50 concurrent users in any single group, as you'll know the best option to use at your scale.
… Groups is more designed to have hundreds of groups with only a few members in each (i.e. per-user).
По сути, группа в большей степени предназначена для разных подключений одного пользователя (разные браузеры/устройства). Для большого количества одновременных подключений Channels не подходит (во всяком случае пока). Глубже копать особо не стали, вернулись к прошлому решению на Centrifugo, которое успешно работало у нас несколько лет.
Попробовали у себя на проекте потестировать Django Channels — оказалось, что когда количество подключений в одной группе превышает 200-300 — последние добавившиеся в группу перестают получать сообщения по вебсокету. Это не подходило под наши задачи, вернулись обратно к связке Django+Centrifugo.
Интересная штука.
Рефакторинг с одной стороны порадовал, с другой напугал. Может это с непривычки, конечно.
Порадовала довольно шустрая работа для такого богатого функционала.
Правда вот дев сервер с наскока запустить так и не смог, на отрез отказывается видеть settings.py. В настройках пути прописал, но не сработало.
Хороший скрипт, спасибо. При следующей настройке наверное использую его как основу для своего.
У меня сейчас 2 сервера настроены схожим образом. Из всего что я пробовал связка Nginx+uWSGI + следящий supervisor мне больше всех пришлась по душе.
И еще, забавная опечатка: /etc/init.d/supervisor restop
restop, что-то есть в этой команде ))
«Лучше совершенствовать уже имеющуюся грамотную идею, чем гоняться за другими, новыми. Не стоит разбрасываться — одной идеи вполне достаточно для работы».
«Если человек хорошо делает свою работу, последующее вознаграждение, прибыль и все финансовые вопросы будут решаться и регулироваться сами собой, бизнес нужно начинать с малого и постепенно расширять его за счет доходов. Если доходов нет — это сигнал владельцу: он попусту теряет время и, возможно, занялся не своим делом».
«Я принял твердое решение никогда не связываться с компаниями, где всем заправляют спекулянты и деньги стоят на первом месте».
«Не работодатель платит жалование. Он попросту его распределяет. Только конечный продукт определяет сумму выплат».
«Самое неудачное время одалживать деньги, когда банкиры точно знают, что вы в них нуждаетесь».
«Мы не держим «экспертов». Более того, мы вынуждены избавлять от работника, как только он возомнит себя таковым, поскольку человек, хорошо знающий свое дело, никогда не станет утверждать, что знает его досконально».
Всем, кто занимается своим бизнесом или планирует его организовать тоже советую прочитать эту книгу. Одна из лучших книг о бизнесе, которую мне доводилось читать.
Спасибо за статью!
Как бальзам на душу, что где-то учебный процесс организован по-человечески.
А то вчера читал статью про образование на факультете ИУ в Бауманке и плакал. Сам Бауманку закончил, когда учились — терпели, но сейчас вспоминаешь — понимаешь, в каком ужасном состоянии образование в постсоветских вузах.
Да, точно. Столько раз переустанавливал в самых разных вариантах, что глаз уже замылился.
Но все равно не помогло.
В итоге решил проблему через MacPorts:
sudo port install python26, py26-mysql, py26-django, py26-pil
Многие негативно относятся к MacPorts и подобным вещам, и я никогда не пользовался ими раньше боясь захламления системы ненужным мусором. На деле все оказалось не так страшно, и к тому же очень удобно.
Пересобрал libjpeg еще раз, ошибок и жалоб замечено не было. Эффект правда тот же.
Нашел вот эту вещь — ethan.tira-thompson.org/Mac_OS_X_Ports.html, библиотека jibjpeg уже собранная с инсталлером. Установил, в папке /usr/local/lib/ появился файл libjpeg.62.dylib, все ок.
Переставил PIL, но он все равно ругается — Symbol not found: _jpeg_resync_to_restart
Проверил зависимости _imaging через otool, сслыка есть на эту библиотеку, все ок вроде:
/Library/Python/2.6/site-packages/PIL/_imaging.so:
/sw/lib/libjpeg.62.dylib (compatibility version 63.0.0, current version 63.0.0)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 124.1.1)
Огромное спасибо за пост, я уже измучился весь с этой проблемой…
Только вот теперь помогите разобраться)
Попробовал вариант а):
Удалил /sw/lib/libjpeg.62.dylib, собрал libjpeg заново по вашему мануалу — теперь библиотеки с именем libjpeg.62.dylib теперь в системе у меня вообще нет ((
А в директории /usr/local/lib/ после make install создались только эти 2 файла: libjpeg.a, libjpeg.la.
Обалденная вещь! Класс ) Заказчики будут в восторге!
*думаю, на каком сайте первым применить ее =Р*
З. Ы. Только вот устанавливать пример не совсем удобно.
Я бы посоветовал вам прописать путь /home/rt/workspace/… в settings.py в каком-нибудь одном месте (и не забыть использовать его в файле urls.py).
И укажите где-нибудь, какой пароль администратора у бд, которая идет вместе с примером )
Новую создать, конечно, не проблема, но зачем тогда эта? )
Да, мне эта мышь тоже не по душе пришлась.
Плохо лежит в моей руке, правая кнопка нажимается проблематично, иногда заедает скролл.
360 градусный скролл мне не нужен, так что обойдусь без него.
Завтра собираюсь заменить ее на Logitech MX Revolution.
Каков вообще предел одновременных подключений к Channels трудно сказать, мы в него не успели упереться.
Кстати, Андрей Светлов на PiterPy говорил, что вообще ASGI это костыль и он по своей архитектуре в принципе не может работать быстро. Хотя и отметил, что это неплохое решение для Django из коробки для тех, у кого нет больших нагрузок.
Andrew Godwin в нем ответил следующее:
По сути, группа в большей степени предназначена для разных подключений одного пользователя (разные браузеры/устройства). Для большого количества одновременных подключений Channels не подходит (во всяком случае пока). Глубже копать особо не стали, вернулись к прошлому решению на Centrifugo, которое успешно работало у нас несколько лет.
Рефакторинг с одной стороны порадовал, с другой напугал. Может это с непривычки, конечно.
Порадовала довольно шустрая работа для такого богатого функционала.
Правда вот дев сервер с наскока запустить так и не смог, на отрез отказывается видеть settings.py. В настройках пути прописал, но не сработало.
У меня сейчас 2 сервера настроены схожим образом. Из всего что я пробовал связка Nginx+uWSGI + следящий supervisor мне больше всех пришлась по душе.
И еще, забавная опечатка:
/etc/init.d/supervisor restop
restop, что-то есть в этой команде ))
Хотя, если честно, для чего-то большого использовать его пока не решаюсь.
Интересно, а что за «Enable additional effects for IE9» внизу? Где-то я это уже видел =)
«Лучше совершенствовать уже имеющуюся грамотную идею, чем гоняться за другими, новыми. Не стоит разбрасываться — одной идеи вполне достаточно для работы».
«Если человек хорошо делает свою работу, последующее вознаграждение, прибыль и все финансовые вопросы будут решаться и регулироваться сами собой, бизнес нужно начинать с малого и постепенно расширять его за счет доходов. Если доходов нет — это сигнал владельцу: он попусту теряет время и, возможно, занялся не своим делом».
«Я принял твердое решение никогда не связываться с компаниями, где всем заправляют спекулянты и деньги стоят на первом месте».
«Не работодатель платит жалование. Он попросту его распределяет. Только конечный продукт определяет сумму выплат».
«Самое неудачное время одалживать деньги, когда банкиры точно знают, что вы в них нуждаетесь».
«Мы не держим «экспертов». Более того, мы вынуждены избавлять от работника, как только он возомнит себя таковым, поскольку человек, хорошо знающий свое дело, никогда не станет утверждать, что знает его досконально».
Всем, кто занимается своим бизнесом или планирует его организовать тоже советую прочитать эту книгу. Одна из лучших книг о бизнесе, которую мне доводилось читать.
Как бальзам на душу, что где-то учебный процесс организован по-человечески.
А то вчера читал статью про образование на факультете ИУ в Бауманке и плакал. Сам Бауманку закончил, когда учились — терпели, но сейчас вспоминаешь — понимаешь, в каком ужасном состоянии образование в постсоветских вузах.
Если бы физику так преподавали в моей школе или в универе — я бы возможно посвятил ей жизнь.
Но все равно не помогло.
В итоге решил проблему через MacPorts:
sudo port install python26, py26-mysql, py26-django, py26-pil
Многие негативно относятся к MacPorts и подобным вещам, и я никогда не пользовался ими раньше боясь захламления системы ненужным мусором. На деле все оказалось не так страшно, и к тому же очень удобно.
Нашел вот эту вещь — ethan.tira-thompson.org/Mac_OS_X_Ports.html, библиотека jibjpeg уже собранная с инсталлером. Установил, в папке /usr/local/lib/ появился файл libjpeg.62.dylib, все ок.
Переставил PIL, но он все равно ругается — Symbol not found: _jpeg_resync_to_restart
Проверил зависимости _imaging через otool, сслыка есть на эту библиотеку, все ок вроде:
/Library/Python/2.6/site-packages/PIL/_imaging.so:
/sw/lib/libjpeg.62.dylib (compatibility version 63.0.0, current version 63.0.0)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 124.1.1)
Уже не знаю куда и копать…
Только вот теперь помогите разобраться)
Попробовал вариант а):
Удалил /sw/lib/libjpeg.62.dylib, собрал libjpeg заново по вашему мануалу — теперь библиотеки с именем libjpeg.62.dylib теперь в системе у меня вообще нет ((
А в директории /usr/local/lib/ после make install создались только эти 2 файла: libjpeg.a, libjpeg.la.
Как быть?
Есть чему поучиться у вас в навыках владения питоном и джангой.
*думаю, на каком сайте первым применить ее =Р*
З. Ы. Только вот устанавливать пример не совсем удобно.
Я бы посоветовал вам прописать путь /home/rt/workspace/… в settings.py в каком-нибудь одном месте (и не забыть использовать его в файле urls.py).
И укажите где-нибудь, какой пароль администратора у бд, которая идет вместе с примером )
Новую создать, конечно, не проблема, но зачем тогда эта? )
Честно сказать, через стандартный термирал mac os работать с mc почти невозможно =(
Плохо лежит в моей руке, правая кнопка нажимается проблематично, иногда заедает скролл.
360 градусный скролл мне не нужен, так что обойдусь без него.
Завтра собираюсь заменить ее на Logitech MX Revolution.
Разработчикам сайта — респект. Зарегистрировался.