
Alex
18.02.2019
11:02:34

Tishka17
18.02.2019
11:02:36

Philipp
18.02.2019
11:02:49

Tishka17
18.02.2019
11:02:58
Но попахивает такой код, конечно

Google

Eldar
18.02.2019
11:03:03
А в свежих версиях торнадо можно комбинировать gen.coroutine и async await


Maxim
18.02.2019
11:03:06
Ребята, а скажите, как в Python с захватом переменных в лямбды и функции?
Например, мне надо в функцию высшего порядка передать функцию, которая что-то сделает и положит значение в переменную из моего кода.
Пока это получается лишь через глобальную переменную из модуля, но это -- слишном высокий уровень, нехорошо.
Ну и вопрос "как сделать по-другому без захвата" -- неинтересен, интересны именно свойства языка.
Можно так сделать или нет. (может быть и нельзя, такой ответ принимается).
Надо что-то типа:
offer_no = None
def wait_for_offer(j):
if ....:
offer_no = j['data']
return True
else:
return False
wait_for_notification(connection, wait_for_offer)
print('---- OFFER RECEIVED! %s ----' % offer_no)
возвращаешь в функцию высшего порядка свою функцию) не совсем понятен вопрос)
def callee(*args, **kwargs):
return args, kwargs
def caller(*args, **kwargs):
return callee(*args, **kwargs)
args, kwargs = caller('a', hello='world')
print(args, kwargs)

Ilia
18.02.2019
11:04:01

Sergey❄️
18.02.2019
11:04:14
У тебя не будет ровного прямоугольника никогда
https://stackoverflow.com/questions/43000305/opencv-canny-edge-detection-is-not-working-properly-on-ideal-square
Можешь прочитать сам

Maxim
18.02.2019
11:07:42
Это понятно, что можно так обойти проблему...
Меня язык интересует.
чтобы изменить значение глобальной переменной внутри функции, тебе нужно указывать global offer_no внутри функции
offer_no = None
def wait_for_offer(j):
global offer_no
if ....:
offer_no = j['data']
return True
else:
return False
wait_for_notification(connection, wait_for_offer)
print('---- OFFER RECEIVED! %s ----' % offer_no)

any
18.02.2019
11:07:48

Sergey❄️
18.02.2019
11:08:18

any
18.02.2019
11:08:56

Terminator
18.02.2019
11:09:41
Oleg Cherdakov будет жить. Поприветствуем!

Tishka17
18.02.2019
11:09:59
Вообще, шарить что-то между функциями неявно - так себе идея

Ilia
18.02.2019
11:10:26

Google

Tishka17
18.02.2019
11:11:10

Ilia
18.02.2019
11:11:47


Maxim robox
18.02.2019
11:18:33

Ilia
18.02.2019
11:19:55
Гы, зачем там класс-то?

Maxim robox
18.02.2019
11:20:12

Ilia
18.02.2019
11:20:14
Нет, такое -- точно не хотел.
Ну я идею понял, спасибо...

Maxim robox
18.02.2019
11:22:48

Tishka17
18.02.2019
11:22:50

В.
18.02.2019
11:23:35
Ребят, мне нужно чтобы скрипт, отдельный от основного, постоянно анализировал и обновлял данные таблицы в базе данных. Но сталкиваюсь с проблемой, что он начинает конкретно грузить процессор, как избежать этой нагрузки? Выносить в отдельный сервер его?

Ilia
18.02.2019
11:24:18

Tishka17
18.02.2019
11:24:53

Ilia
18.02.2019
11:25:04

Tishka17
18.02.2019
11:25:05
Можешь с nice поиграться или cpulimit

✭ Alexander ✭
18.02.2019
11:25:07

Ilia
18.02.2019
11:25:29

Tishka17
18.02.2019
11:25:41
Ну да

Google

Tishka17
18.02.2019
11:25:48
Просто она перестанет мешать

Ilia
18.02.2019
11:26:00
Ну да
Я просто как бы человеку поясняю...

Tishka17
18.02.2019
11:26:34
Или проблема в том, что скрипт не делает нихуя и жрет проц?

В.
18.02.2019
11:28:16

Tishka17
18.02.2019
11:28:26
Так

В.
18.02.2019
11:29:10
Таблица правда mysql, но все же 2 ядра на полную из-за него нагружены
+ процесс mysqld тоже кокрентно грузит

Tishka17
18.02.2019
11:30:55
А сколько времени ему надо на один проход?
Много записей?
Если не успевает, то не успевает. Возможно, ты вообще что-то не то с данными делаешь

В.
18.02.2019
11:32:38
Записи обновляются каждую секунду по 10 шт основным скриптом инстертом, а этот их вытаскивает, обновляет нужные данные в нужных таблицах и удаляет.

Tishka17
18.02.2019
11:33:41
так, то есть во0-первых ты юзаешь БД как очередь. попробуй rabbitmq например. Он расчитан на постоянную вставку и удаление
во-вторых, почему сразу нельзя нормально данные положить, а делаем через очередь?

В.
18.02.2019
11:34:52
потому что у меня лочится таблица и тормозит скрипт, мне нужно постоянно обновлять одни и те же поля, без очереди не вариант вообще

Tishka17
18.02.2019
11:35:29
“постоянно обновлять одни и те же поля” - звучит как проблема
что за поля?
почему лочится таблица? должна запись лочиться

Jentry
18.02.2019
11:36:39

В.
18.02.2019
11:37:11
например, увеличивать количество выполнений задания на +1, поле одно запросов до 100 в секунду доходит,постоянно ловил lock wait timeout exceeded try restarting transaction

Google

Tishka17
18.02.2019
11:37:36
ух, хранить инкрементирующийся счетчик в реляционной БД - напряжно
@jerunman какую БД взять для хранения счетчиков?

Jentry
18.02.2019
11:38:06
redis?

Tishka17
18.02.2019
11:38:23
а если надежнее?

Admin
ERROR: S client not available

Jentry
18.02.2019
11:38:38
redis + настроенный durability

В.
18.02.2019
11:38:58
у меня не только счетчики, там и балансы обновляются и записываются юзеры, выполнившие задания

Tishka17
18.02.2019
11:39:22
похоже, тебе бы nosql
может касандра?

Jentry
18.02.2019
11:40:10
лойс за кассандру

Tishka17
18.02.2019
11:41:03
с мускулум я могу тебе только предложить rabiitmq + в памяти агрегировать операции, относящиееся к одной записи

В.
18.02.2019
11:42:49
спасибо, пошел изучать

Jentry
18.02.2019
11:44:29
спасибо, пошел изучать
начни с того, почему у тебя таблица лочится, как уже сказали выше - должны лочиться записи, в postgres у нас есть select for update, полагаю у тебя тоже

Tishka17
18.02.2019
11:44:48
в мускуле есть select for update

В.
18.02.2019
11:45:00
скорее запись лочится, я просто не так выразился
lock wait timeout exceeded try restarting transaction
select for update разве поможет решить проблему?
он наоборот лочит запись и создает проблему для меня

lost
18.02.2019
11:48:59
значит ты что-то делаешь не так

Google

Tishka17
18.02.2019
11:54:59
если у тебя таймаут транзакции - проверяй в одной ли последовательности ты делаешь записи
может там дэдлок
хз умеет ли мускул их детектить

Jentry
18.02.2019
11:55:37

Terminator
18.02.2019
11:57:01
@stasgra будет жить. Поприветствуем!

lost
18.02.2019
12:07:00
может там дэдлок
если бы был дедлок был бы и эксепшн конкретный по дедлоку, просто долгое ожидание на лок - скорее всего есть какие-то долгие транзакции в бд
детектить и отстреливать умеет из коробки

Tishka17
18.02.2019
12:07:28
ну ок, я же сказал - хз умеет ли мускул дэдлоки детектить
значит умеет
тогда тупо слишком много записей
не успевает

lost
18.02.2019
12:08:15
не обязательно, с большой вероятностью это может быть криворукость архитектора

Tishka17
18.02.2019
12:08:37
ну да, может банально не быть индекса и он полным перебором ищет запись для обновления
или ещё какая-нибудь дичь