@ru_python

Страница 7299 из 9768
LighteR
05.12.2018
20:35:11
основной смысл использования leading comma это возвожность закомментировать последнюю строку в языках, в которых trailing запрещен синтаксисом. В питоне такой проблемы нет, а значит и нет смысла переносить запятую на новую строку

LighteR
05.12.2018
20:35:53
т.е. у меня на каждом белом ip по балансировщику, а внутри уже могут быть сотни приложений, требующих специфической конфигурации веб-сервера

Google
LighteR
05.12.2018
20:37:17
и чтобы не тащить в балансер знания об особенностях каждого приложения имеет смысл для них держать свои веб-сервера

Alex
05.12.2018
20:37:27
чего?
того

LighteR
05.12.2018
20:38:04
ну и релоадить балансеры на любой чих любого приложения не кажется хорошей идеей

Sfy
05.12.2018
20:38:06
чего?
https://www.python.org/dev/peps/pep-0008/#should-a-line-break-before-or-after-a-binary-operator

Alex
05.12.2018
20:38:10
и чтобы не тащить в балансер знания об особенностях каждого приложения имеет смысл для них держать свои веб-сервера
вариант конечно. я когда думал про балансер на входе, мне представлялся haproxy какой-нибудь.

ну и мне сложно представить зачем нужно релоадить балансер по каждому чиху

LighteR
05.12.2018
20:38:47
LighteR
05.12.2018
20:40:32
ну и мне сложно представить зачем нужно релоадить балансер по каждому чиху
Ну вот и я про тоже. У тебя могут быть какие-то особенности конфигурации веб-сервера для определенного приложения. И изменение этой конфигурации вообще не должно влиять на балансер. Поэтому и надо держать для приложений свои инстансы веб-серверов, которые можно рестартить/релоадить одновременно и атомарно с самим приложением

Sfy
05.12.2018
20:42:36
В питоне syntax error в таких случаях будет
Передавать аргументы в функцию так точно можно.

LighteR
05.12.2018
20:42:48
Т.е. в идеале балансеры вообще не должны релоадиться без крайней необходимости

Google
Tishka17
05.12.2018
20:43:36
Нет, это уродство
Это костыли для языков, в которых последняя запятая не игнорируется

А. Ответили уже

LighteR
05.12.2018
20:44:09
основной смысл использования leading comma это возвожность закомментировать последнюю строку в языках, в которых trailing запрещен синтаксисом. В питоне такой проблемы нет, а значит и нет смысла переносить запятую на новую строку

Tishka17
05.12.2018
20:44:15
Да да

LighteR
05.12.2018
20:44:20
)

И самая большая головная боль в релоаде балансеров когда они проксируют websocket'ы

тебе приходится дропать все websocket-коннекты

Nikolay
05.12.2018
20:45:47
Anonymous
05.12.2018
20:46:00
Какие глупые вопросы задают программистам ?

Nikolay
05.12.2018
20:46:27
Какие глупые вопросы задают программистам ?
"почему не найдешь нормальную работу"

Sfy
05.12.2018
20:46:33
основной смысл использования leading comma это возвожность закомментировать последнюю строку в языках, в которых trailing запрещен синтаксисом. В питоне такой проблемы нет, а значит и нет смысла переносить запятую на новую строку
Я понял. Но по примеру, который я кинул и по опыту работы с длинными конфигами на Перле, leading comm'ы куда виднее. То есть, чтобы визуально найти недостающую запятую спереди, долго думать не надо, потому что сразу ломается идентация.

Tishka17
05.12.2018
20:46:48
Какие глупые вопросы задают программистам ?
"Почему у меня принтер не работает?"

LighteR
05.12.2018
20:46:55
ну точнее сначала ты задираешь таймауты на такие коннекты, а потом оказывается, что reload nginx'а слишком долго происходит, т.к. он ждем завершения этих коннектов

Nikolay
05.12.2018
20:47:08
Какие глупые вопросы задают программистам ?
"сможешь взломать страницу вконтакти"

LighteR
05.12.2018
20:47:30
и в итоге воркеры nginx'а по таймауту останавливаются

потому что graceful сделать нельзя

LighteR
05.12.2018
20:48:57
В общем, избегайте релоадов балансировщиков

я наступал на грабли когда балансеры релоадились на каждое изменение в service discovery consul'а. В итоге в определенные моменты доходило то того, что балансеры просто перманентно были в состоянии релоада

плюс из-за затупов с websocket'ами происходила ситуация когда балансеры слишком долго реагировали на изменение актуальных upstream'ов

Google
LighteR
05.12.2018
20:52:11
и направлялил трафик не туда

Sfy
05.12.2018
20:53:18
Я не программист, но меня постоянно просят что-то починить настроить в нерабочее время.

Денис
05.12.2018
21:20:52
Эникей

LighteR
05.12.2018
21:25:00
и в итоге воркеры nginx'а по таймауту останавливаются
Совсе забыл, как вишенка на торте: после того как мы одномементно разорвали все websocket-коннекты клиенты тут же пытаются реконнекнуться. И не просто каждый пользователь, а каждая вкладка в браузере этого пользователя. Т.е. мы можем получить невероятный всплеск рпс на создание новых websocket-коннектов

LighteR
05.12.2018
21:25:58
не делайте как я - не наступайте на эти грабли

Tishka17
05.12.2018
21:26:06
А как?

Геокластер и перезагрузка в 2 ночи по местному?

LighteR
05.12.2018
21:27:19
ну у тебя например, 10 приложений и только в одном из них вебсокеты. Нельзя допускать ситуации когда приходится релоадить балансировщик из-за того, что поменялась аппка, которая не использует вебсокеты

например, у тебя 3 балансера и 20 контейнеров приложения, которое обслуживает вебсокеты, когда ты будешь делать апдейт приложения у тебя в один момент времени будет реконнектиться n/20 клиентов. Когда ты захочешь релоаднуть балансер у тебя одномоментно реконнектнется n/3 клиентов

LighteR
05.12.2018
21:29:49
ну и в приложении можно сделать какой-то размазанный во времени разрыв коннектов перед тем как остановить контейнер

Вообще, я думал это основная проблема
Еще проблема в graceful reload nginx'а. Старые воркеры не останавливаются сами, т.к. у них есть постоянные вебсокет-коннекты

либо они должны быть принудительно убиты

либо надо делать какую-то логику, чтобы приложение их обрывало

Sergey
05.12.2018
23:15:51
подскажите как работает автоматический рестарт дев сервера, например у фласка? как отслеживаются изменения

Sergey
05.12.2018
23:18:46
Отслеживает изменения в исходниках? ?
эт понятно но как? какой механизм

Никита
05.12.2018
23:19:28
Допустим каждые 10 секунд сверяем суммы файлов, поменялся какой-то - рестартим

Google
Nikolay
05.12.2018
23:20:19
так это ci/cd задача, где-то в постхуке

Sergey
05.12.2018
23:22:01
ну вот мне сам механизм интересен

Sergey
05.12.2018
23:23:15
inotify
во, чет знакомое

Sergey
05.12.2018
23:23:49
короч через системные вызовы как понял ?

Alex
05.12.2018
23:25:59
короч через системные вызовы как понял ?
да. либо inotify \ либо периодически mtime проверяет

Admin
ERROR: S client not available

Sergey
05.12.2018
23:26:57
ну выглядит не так страшно отслеживаешь события, если те которые нужно (добавление/модификация/удаление) рестартишь

Alex
05.12.2018
23:27:16
да

Ivan
06.12.2018
00:45:03
Доброго времени. Вопрос: `def narcissistic(value): value = str(value) len = len(value) return sum([int(i) ** len for i in value]) == int(value)` len = len(value) - ошибка использования переменной до инициализации. Вроде в книге Лутца про это было, что как-то хитро во время исполнения функции все эти инициализации проходят, но нкак не могу найти, дабы понять что и как как-то неэстетично смотрится создание переменной вроде len_ в данном конкретном случае)

Ivan
06.12.2018
00:53:55
это очевидно, но вопрос не о том

вопрос в том, почему сначала не вызывается len как функция, а сразу подразумевается как локальная переменная

Nikolay
06.12.2018
00:58:02
замени то выражение с присваиванием len, на любое из str/list например

то же самое

Ivan
06.12.2018
01:01:19
смутно припоминаю что дело в том, что первым делом в момент вызова функции из всех операций присваивания собираются локальные переменые. Дело не в "лево"\"право". Потому и спрашиваю, что смутно. Какие-то хитрые ошибки может создавать (а может и нет)

Google
Ivan
06.12.2018
01:08:41
значит я перепутал с определением всех функций при загрузке модуля. В моём вопросе проблема в том, что внешняя переменная затирается сразу после присвоения одноимённой до её использования. Ладно, вроде ничего плохого это не значит

Nikolay
06.12.2018
01:09:16
это про область видимости. снаружи len - нормальный

Ivan
06.12.2018
01:11:25
ладно, таки ещё поищу чего, а пока спать. Спасибо.

SetazeR
06.12.2018
01:42:57
хм а это сильно шакальная практика делать экземпляр класса в отдельном скрипте (с дополнительными ништяками), а потом его просто импортировать в основной скрипт для работы?

SetazeR
06.12.2018
01:46:46
А, ну окей

Aever
06.12.2018
01:48:17
Вопрос, как в вызванной функции, вызвать другую функцию несколько раз в зависимости от количества аргументов не используя цикл for, так можно? Код асинхронный и лучше использовать генераторы вместо простых циклов.

SetazeR
06.12.2018
01:49:11
функция с произвольным набором аргументов чтоли?

*args **kwargs?

Aever
06.12.2018
01:50:23
К примеру, нужно работать с типом данных кортеж

SetazeR
06.12.2018
01:52:14
К примеру, нужно работать с типом данных кортеж
это никак не облегчило понимание вопроса

если только у тебя внешняя функция - одного аргумента в который ты кортеж передаёшь

Aever
06.12.2018
01:54:28
это никак не облегчило понимание вопроса
Мне нужно вызвать функцию которая отвечает за транзакции в mysql. Эта функция инициирует транзакцию и внутри вызывает внешнюю функцию которая делает запросы в БД.

И вот запросов может быть много, их в кортеже можно передавать, к примеру

SetazeR
06.12.2018
01:55:47
уф

Donaudampf
06.12.2018
01:56:29
а чем for не угодил?

SetazeR
06.12.2018
01:58:18
фор видимо не при чём, суть что у него управление блочится пока он всё из кортежа обработает

Страница 7299 из 9768