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

Denis
05.12.2018
20:35:18
Ну вот например, к слову о leading comma vs trailing comma:
/ error in standard style
var a = "ape",
b = "bat",
c = "cat",
d = "dog"
e = "elf",
f = "fly",
g = "gnu",
h = "hat",
i = "ibu";
// error in comma-first style
var a = "ape"
, b = "bat"
, c = "cat"
, d = "dog"
e = "elf"
, f = "fly"
, g = "gnu"
, h = "hat"
, i = "ibu";
В питоне syntax error в таких случаях будет

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

Google

Nikolay
05.12.2018
20:37:07

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
ну и мне сложно представить зачем нужно релоадить балансер по каждому чиху

LighteR
05.12.2018
20:38:47

Alex
05.12.2018
20:39:24

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

Sfy
05.12.2018
20:42:36

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

Alex
05.12.2018
20:42:49

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

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 сделать нельзя

Tishka17
05.12.2018
20:47:53

LighteR
05.12.2018
20:48:57
В общем, избегайте релоадов балансировщиков
я наступал на грабли когда балансеры релоадились на каждое изменение в service discovery consul'а. В итоге в определенные моменты доходило то того, что балансеры просто перманентно были в состоянии релоада
плюс из-за затупов с websocket'ами происходила ситуация когда балансеры слишком долго реагировали на изменение актуальных upstream'ов

Google

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

Anonymous
05.12.2018
20:52:26

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

Игорь
05.12.2018
20:56:43

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

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

Tishka17
05.12.2018
21:25:50

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
ну и в приложении можно сделать какой-то размазанный во времени разрыв коннектов перед тем как остановить контейнер
либо они должны быть принудительно убиты
либо надо делать какую-то логику, чтобы приложение их обрывало

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

Никита
05.12.2018
23:18:28

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
ну вот мне сам механизм интересен

Alex
05.12.2018
23:22:58

Sergey
05.12.2018
23:23:15

Alex
05.12.2018
23:23:17

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

Alex
05.12.2018
23:25:59

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_ в данном конкретном случае)

Nikolay
06.12.2018
00:53:25

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
смутно припоминаю что дело в том, что первым делом в момент вызова функции из всех операций присваивания собираются локальные переменые. Дело не в "лево"\"право". Потому и спрашиваю, что смутно. Какие-то хитрые ошибки может создавать (а может и нет)

Nikolay
06.12.2018
01:02:29

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
хм а это сильно шакальная практика делать экземпляр класса в отдельном скрипте (с дополнительными ништяками), а потом его просто импортировать в основной скрипт для работы?

Donaudampf
06.12.2018
01:44:56

Alek
06.12.2018
01:45:50

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
К примеру, нужно работать с типом данных кортеж

Donaudampf
06.12.2018
01:50:40

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
фор видимо не при чём, суть что у него управление блочится пока он всё из кортежа обработает