@ru_python

Страница 867 из 9768
Zart
01.06.2016
04:18:17
ну в смысле тот аллованс

No
01.06.2016
04:19:11
Выше вроде описали алгоритм https://en.wikipedia.org/wiki/Token_bucket

По ведру на каждый домен и вперёд.

А вёдра в редис. Хехе.

Google
Zart
01.06.2016
04:20:46
угу... оно и есть, только в токен бакете декремент вроде как на равных интервалах, а в моем примере выше - мы учитываем время с последнего запроса, которое может быть произвольным

суть та же. вёдра надо в чтото с поддержкой атомарного декремента/инкремента

мемкешед, редис. если поебаться с транзакциями, то и сиквел

но если будет ровно один процесс, то можно и в дикт с локом

еще можно плюнуть и заставить этим заниматься нгинкс 8)

drjackild
01.06.2016
04:24:36
спасибо, ща почитаю) по-моему Token Bucket как раз таки то, что ты написал выше, там еще есть Leaky Bucket, вот он вроде с константным интервалом

asyncio в один процесс работает, так что, по идее там даже синхронизировать не надо. а операции изменения значения по ключу вроде атомарны

Sergey
01.06.2016
04:31:00
Парни, как вы оцениваете такой подход к конфигурированию приложения https://gist.github.com/pankovseryi/71fc37256bf6de21b6ad4d31d6a326be ?

Zart
01.06.2016
04:32:52
конфигпарсер на входе умеет принимать имена файлов

Sergey
01.06.2016
04:33:32
Сам подход имеет право на жизнь? Т.к. я несколько дней ломаю голову и люто гуглю на тему как же все таки правильно это сделать.

Zart
01.06.2016
04:34:54
мне вот те все тернарные операторы не нравятся

Sergey
01.06.2016
04:35:29
Google
drjackild
01.06.2016
04:35:58
ну замени их на CONFIG_FILE_PATH = args.config_file or os.path.join(ROOT_DIR, 'config.ini')

Zart
01.06.2016
04:36:04
у тебя на самом деле куча источников

1) командная строка 2) переменные окружения 3) конфиг 4) дефолты

drjackild
01.06.2016
04:37:57
но Зарт не об этом, я не так понял. он не о синтаксисе, а буквально о количестве источников

Sergey
01.06.2016
04:38:56
1) командная строка 2) переменные окружения 3) конфиг 4) дефолты
Моей задачей было: если переменная есть в argv мы берем из неё значение, если нет мы берем из стандартного конфига. Т.е. на моем примере это если есть кастомный конфиг от юзера мы его парсим, если нет берем дефолтный.

Zart
01.06.2016
04:39:46
аргпарсер возвращает объект у конфигпарсер есть getsection который сразу диктом дёргает всю секцию os.environ - дикт-лайк объект для доступа к дефолты можно диктом задать.. имея все эти источники, конфиг можно свести к комбинированию диктов в нужной последовательности

Zart
01.06.2016
04:42:18
https://github.com/ansible/ansible/blob/devel/lib/ansible/constants.py не очень элегантный пример из реального мира

https://github.com/openstack/python-openstackclient/blob/master/openstackclient/shell.py а вот пример попроще, который в дефолты аргпарсу пихает переменные окружения

иногда правда надо решать что имеет приоритет перед чем...

Sergey
01.06.2016
04:44:39
https://github.com/ansible/ansible/blob/devel/lib/ansible/constants.py не очень элегантный пример из реального мира
Спасибо, гляну. Я изучал устройство fabric и httpie, интересно как у него это устроено

Zart
01.06.2016
04:45:41
у одних тулзов например переменные окружения главнее и перекрывают значения в конфиге в других - считаются дефолтом и имеют минимальный обычно аргументы командной строки имеют высший приоритет, но я видел и обратные примеры

Sergey
01.06.2016
04:47:28
у одних тулзов например переменные окружения главнее и перекрывают значения в конфиге в других - считаются дефолтом и имеют минимальный обычно аргументы командной строки имеют высший приоритет, но я видел и обратные примеры
Вот я и ищу красивый способ перекрыть дефолтные значения аргументами из командной строки и дать доступ к полученным значения всем модулям, которым это необходимо

Zart
01.06.2016
04:47:43
еще бывают сложные взаимосвязи - когда одни значения рассчитываются от других и тогда важен порядок обхода

Zart
01.06.2016
04:48:16
https://pypi.python.org/pypi/ConfigArgParse 8))

http://stackoverflow.com/a/5826167/356274 вот интересный вариант с поддержкой указания конфига в командной строке

Sergey
01.06.2016
04:49:51
https://pypi.python.org/pypi/ConfigArgParse 8))
Вот это очень близко, изучу как устроен

Latish86
01.06.2016
04:53:10
Почему может не работать автокомплит в ipython. Устанавливал через pip

Google
Alexey
01.06.2016
04:53:45
http://pythonclock.org

Zart
01.06.2016
04:54:49
к моменту когда закатится пи2 выйдет питон 4.0...

давайте питон3клок запилим

с той же датой

Maxim robox
01.06.2016
04:55:43
Гвидо говорил, что больше такого не будет, как при выходе 3.0

Zart
01.06.2016
04:55:57
ну и что

drjackild
01.06.2016
05:06:37
короче, что-то такое получилось: https://gist.github.com/DrJackilD/442cc69648704f340a556129eb3d2bc6

Zart
01.06.2016
05:08:19
ow

drjackild
01.06.2016
05:08:44
ой, единственное, наверное не текущее время использовать, а то, которое в запросе

Zart
01.06.2016
05:09:45
это явно не тот алгоритм

((self.timestamp + self.period) - now).total_seconds() там используется трижды. можно было бы один раз посчитать

но мне совершенно не нравятся строки 17 и 24

drjackild
01.06.2016
05:14:12
в данном случае разница с твоим по-моему только в том, что это в теории должно обеспечивать равномерную нагрузку в течении периода

не 60/60, а потом ждать, а с задержкой посылать запросы, чтобы выйти в конце окна на задуманное количество запросов

а что не так со счетчиком?

Zart
01.06.2016
05:16:28
эм...

drjackild
01.06.2016
05:18:15
а про timedelta согласен, надо в начало метода вынести вычисление

Zart
01.06.2016
05:21:03
https://gist.github.com/zart/9a445cbfd11afd59568b0cb4f8709bcb про то что выше

drjackild
01.06.2016
05:24:49
ну да, как я уже сказал, согласен, спасибо за исправление) даже вот так: https://gist.github.com/DrJackilD/442cc69648704f340a556129eb3d2bc6 если использовать значение, которое получено из реквеста. А со счетчиком что не так-то, не томи :)

Zart
01.06.2016
05:25:18
то что у него дикей только после полного периода

Google
Zart
01.06.2016
05:25:31
а я предлагал на каждом реквесте это делать

по сути ты считаешь колво хитов пока не прошел тот самый интервал

по концу интервала резет, причем зачем-то в единицу, а не ноль

drjackild
01.06.2016
05:26:45
так мы предполагаем, что интервал уже прошел и начался новый

Zart
01.06.2016
05:27:00
а. текущий на тот момент и будет первым, ок

твой вариант будет хреново держать рейт

Admin
ERROR: S client not available

drjackild
01.06.2016
05:28:28
сто процентов будет +/- n запросов, ровно не будет

Zart
01.06.2016
05:28:30
положим у тебя лимит 10 реквестов в 10 секунд. для круглого счета

прилетает первый, и у тебя пошел отсчет

drjackild
01.06.2016
05:28:53
но зато не будет точно 10 запросов в секунду, а потом ожидание в 9 секунд

Zart
01.06.2016
05:30:17
проходит скажем 9 секунд и нам влетает 9 реквестов сразу твой код их пропускает, и положим на этой 11й секунде влетает еще 10 твой код видит что 10 секунд прошло, резетит хиты и отсчитывает эту десятку и ждёт оставшиеся 9-10 сек до интервала но на этом стыке тебе реально влетело 19 запросов за 1-2 секунды

т.е. при X запросов в Y секунд у тебя есть моменты когда тебе может влететь 2*X запросов мгновенно

после чего придётся ждать Y секунд, но тем не менее

? Snyp
01.06.2016
05:32:06
вчера узнал что в /usr/local/bin можно складывать свои приложения и запускать как комманда без расширения и не только баш скрипты. почему мой скрипт с обычным сообщением echo для теста, не выполянется без прав админа? а другие лежащие в той же папке спокойно грузятся и без админа?

? Snyp
01.06.2016
05:33:37
права?
ну вот я назвал свой файл test и с обычного имени он не выполняется а sudo test выполняется. Права проверял по сравнению с другими файлами лежащими в этой папке - все эндентично.

Zart
01.06.2016
05:33:43
вероятно chmod u+x вместо chmod a+x

Sharkus
01.06.2016
05:33:48
идентично*

Google
Zart
01.06.2016
05:34:21
вообще-то test - это встроенная команда шелла...

Sharkus
01.06.2016
05:34:38
всё.очень.плохо :)

Zart
01.06.2016
05:34:40
и по умолчанию перекрывает бинарник, если только не запустить через \test

drjackild
01.06.2016
05:34:55
согласен с тобой, так может получиться. но я значит не до конца понял твою идею. чет я продолжаю тупить, утро уже на дворе. как ты предлагаешь лучше считать тогда?

Zart
01.06.2016
05:35:34
мне ща с утра тоже влом думать уже... 8\

? Snyp
01.06.2016
05:35:35
Zart
01.06.2016
05:36:01
$ help test test: test [expr] Evaluate conditional expression. ...

$ which test /usr/bin/test

а потом идёт бинарник в /usr/bin, который тоже ловится до твоего, скорее всего

drjackild
01.06.2016
05:41:24
нашел реализацию ведра на питоне https://gist.github.com/drocco007/6155452

если я правильно понимаю, то ты был прав, fill_rate - константная величина

? Snyp
01.06.2016
05:49:54
а потом идёт бинарник в /usr/bin, который тоже ловится до твоего, скорее всего
я ни разу бинарники не собирал в линухе. не давно перешел. а можно создавать пакеты? ну типа установочных файлов из баш-файлов?

как полноценная прога.

Zart
01.06.2016
05:50:19
вопрос не осилил

половина вещей в /usr/bin - это шелл или питон скрипты

? Snyp
01.06.2016
05:50:47
ну хз, либо можно либо нельзя.

а перл там может быть?

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