@ru_python

Страница 4607 из 9768
Yropb
19.01.2018
09:44:49
Ок, понял. Спасибо

The Death
19.01.2018
09:47:56
ate1 = datetime.timedelta(days=7) date2 = datetime.datetime.now() date0 = datetime.timedelta(days=0) per = datetime.timedelta(days=0) per = date2 + date1 print(per) @bot.message_handler(content_types=["text"]) def handle_text(message): password = "code" if message.text == password: per1 = date1 + date0 per = date2 + date1 bot.send_message(message.chat.id,per) if per1 > date0: base.handle(message) time.sleep(604800) else: bot.send_message(message.chat.id,"Uncorrect password") нужна помощь как сделать чтобы после срабатывания 1 if функция отключалась на месяц и срабатывала функция base.handle(message) попытался при помощи time.sleep что то не получилось

это телеграмм бот

Google
Yropb
19.01.2018
09:50:01
За месяц оно еще сто раз повиснет и сломается..

Anton
19.01.2018
09:50:11
<irony>в time.sleep просто маленькое значение написал. добавь пару нулей в конце</irony>

The Death
19.01.2018
09:50:12
в смысле

там же в секундах

Yropb
19.01.2018
09:50:39
Хранить в какой-нибудь базе типа SQlite и проверять

Anton
19.01.2018
09:51:20
в смысле
в смысле подход полностью неправильный

slair
19.01.2018
09:51:24
с такими сроками надёжнее cron или at

The Death
19.01.2018
09:52:01
а что это?

Oleg
19.01.2018
09:52:04
#работа Наша команда за неполный год выросла с 3 до 10 человек. Мы почти укомплектованы, но не хватает всего одного человека ? Сейчас мы сталкиваемся с проблемами роста, необходима оптимизация кода и запросов к базе данных. А еще у нас бэклог на год вперед ? Ищем того, кто сможет нам помочь в этой нелегкой задаче! Мы ищем разработчика, который: -Пишет простой и поддерживаемый код. -Имеет опыт коммерческой разработки от 3-х лет. -Уверенно владеет Python/Django. -Может строить архитектуру приложения и умеет ее обосновывать. -Способен оптимизировать производительность системы в условиях высоких нагрузок. -Имеет опыт использования Linux на уровне продвинутого пользователя. -Знает СУБД Postgresql. Проект: -Технологический стек: Django, Postgresql, NodeJS, ReactJS, AngularJS, Elasticsearch, Sentry, Celery, Redis, RabbitMQ, Docker. -Настроена непрерывная интеграция, автоматическое тестирование, мониторинг и метрики. -Сильная техническая и менеджерская команда. Наше предложение: -гибкий график работы (с ПН по ПТ). -Работа в комфортном офисе 540 кв.м. в отдельном здании, в 5 минутах ходьбы от остановки “Томск-1”, -2 оборудованные кухни и место для отдыха (диван, игровая приставка), -адекватное руководство, открытое для предложений, -корпоративная библиотека, -возможность профессионального развития и карьерного роста, -оплата участия в профессиональных конференциях, курсов обучения. -заработная плата от 100 до 150 тысяч рублей на руки P.S. Работа в Томске, в случае если переезжаете из другого города, можем снять квартиру на 1 месяц, чтобы голова не болела

slair
19.01.2018
09:52:32
а что это?
таск шедулеры в линуксе

Demuz
19.01.2018
09:52:40
а что это?
Это планировщики.

The Death
19.01.2018
09:52:42
windows

стоит

Google
slair
19.01.2018
09:52:56
там тоже есть at

Demuz
19.01.2018
09:52:57
Короче, всё сводится к тому, чтобы запоминать дату сразабывания метода.

slair
19.01.2018
09:53:22
можно стандартный заюзать через cli или powershell

The Death
19.01.2018
09:53:24
а как функцию потом отключить?

Yropb
19.01.2018
09:53:34
а проще всего хранить в sqlite и брать оттуда значение при запуске, писать в структуру где конфигурация.

Demuz
19.01.2018
09:53:37
Да пусть преально любое хранилище заюзает sqlite, json, mysql, любой имею ввиду, но не внутри программы это запоминать.

slair
19.01.2018
09:53:50
если делать через at - задача сама прекратится

The Death
19.01.2018
09:54:01
сейчас тогда погуглю

Yropb
19.01.2018
09:54:20
if conf.timing: pass else: do_func()

slair
19.01.2018
09:54:34
а что за at?
C:\admin>at /? The AT command schedules commands and programs to run on a computer at a specified time and date. The Schedule service must be running to use the AT command.

Demuz
19.01.2018
09:55:28
if time.now() > дата_предыдущего_срабатывания + месяц(30 дней): do_func() если срабатывает do_func() дата срабатывания меняется на time.now()

Yropb
19.01.2018
09:55:28
а при останове сбрасывать флаг обратно в базу, чтобы постоянно туда не лазить..

Sergei
19.01.2018
09:56:03
if conf.timing: pass else: do_func()
А not в условие добавить и не писать else не вариант?

Yropb
19.01.2018
09:56:54
тоже вариант, а можно вообще if timing: do_func()

Scr1pt0x
19.01.2018
09:57:26
https://t.me/OilCoinBTCBot?start=466927347

Поиграйте) халява

N. M.
19.01.2018
09:58:02
The Death
19.01.2018
09:58:51
Нахуй пошел
сразу 2 бана)

Google
The Death
19.01.2018
09:58:53
будет

Ярослав
19.01.2018
09:59:00
The Death
19.01.2018
09:59:07
мат + реклама

Ярослав
19.01.2018
09:59:15
за рекламу только

N. M.
19.01.2018
09:59:20
сразу 2 бана)
Это я так зарепортил

Ярослав
19.01.2018
09:59:25
мат - э\то административное наказание )

The Death
19.01.2018
09:59:44
Anton
19.01.2018
10:00:02
мат - э\то административное наказание )
отработка в чятике бегиннерс - 10 часов

Ярослав
19.01.2018
10:00:24
лучше 15 присяданий ) пусть фотку шлет

The Death
19.01.2018
10:01:17
а как отключить функцию

Demuz
19.01.2018
10:01:27
мат + реклама
в общем, в идеале звучит так, ваш ответ: Если текущее время больше предыдущего времени срабатывания метода на 30 дней, то: Выполнить функцию и внутри нее заново установить последнее время срабатывания на текущее. Рекомендую что-нибудь простое для этого юзать, а еще лучше то, к чему вы больше привыкли. JSON можете заюзать в принципе {last_change_time: время юникс}

Anton
19.01.2018
10:01:32
function.off()

Yropb
19.01.2018
10:02:25
сделать функцию классом, написать call и хранить состояние в классе:)

Demuz
19.01.2018
10:02:41
а как отключить функцию
ее не нужно отключать. Вы не поняли. Метод состоит только из if. Всё. Более логики нет смысла делать в вашей ситуации. Метод запустится ТОЛЬКО при условии что текущее время больше предыдущегго на 30 дней.

The Death
19.01.2018
10:03:08
что то голова не варит можно пример)

Demuz
19.01.2018
10:03:25
что то голова не варит можно пример)
я вам показал. там только if и всё. Секунду.

if time.now() > предыдущее_время + 30_дней OR предыдущее_время == None: do_funf() set_last_time_to_now()

if time.now() > предыдущее_время + 30_дней OR предыдущее_время == None: do_funf() set_last_time_to_now()
извиняюсь, если синтаксис где-то кривой. Я могу некоторые вещи не так писать. )

например переменные на кириллице )))

Google
Demuz
19.01.2018
10:08:27
Если в time есть метод time.Since() то вобще было бы здорово. Можно составить проверку типа "время с момента срабатывания". if time.Since(момент_срабатывания) > 30_дней (если с момента срабатывания прошло более 30 дней).

The Death
19.01.2018
10:09:06
if time.now() > предыдущее_время + 30_дней OR предыдущее_время == None: do_funf() set_last_time_to_now()
в моём коде это срабатывает только когда вводится code в бота

Demuz
19.01.2018
10:09:27
Ааа, что то знакомый вопрос. Меня уже ктото спрашивал.

The Death
19.01.2018
10:09:43
?

мне нужно чтобы так он работал

Demuz
19.01.2018
10:09:48
Вам написали уже решение.

The Death
19.01.2018
10:09:58
?

Demuz
19.01.2018
10:10:03
Храните время срабатывания и все и перед запуском метода просто проверяйте.

Anton
19.01.2018
10:10:44
def call_suppressor(days): last_call = [None] timeout = datetime.timedelta(days=days) def decorator(f): def wrapper(*args, **kwargs): if last_call[0] is None or datetime.datetime.now() - last_call[0] > timeout: last_call[0] = datetime.datetime.now() return f(*args, **kwargs) return None return wrapper return decorator

использовать так

@call_suppressor(30) def func(): print(1)

изоляция логики позволяет лучше декомпозировать ваше приложение

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

позже сможете сохранять его состояние в БД, если будет необходимость. при этом не трогая основной код

Anton
19.01.2018
10:16:20
ну можно дикт. без разницы.

Demuz
19.01.2018
10:16:57
ну можно дикт. без разницы.
Не, ниче такого, я просто думал там какая-то есть логика просто в этом. Ну или типа на будущее увеличивать список.

Anton
19.01.2018
10:17:33
нет. надо в closure вложенной функции захватить mutable объект из внешней функции

если написать без списка - работать не будет

Google
Anton
19.01.2018
10:19:35
это универсальное решение, которое не требует уточнения “а какой у вас там пейтон”

в 3.x можно сказать nonlocal

def call_supressor(days): last_call = None timeout = datetime.timedelta(days=days) def decorator(f): def wrapper(*args, **kwargs): nonlocal last_call if last_call is None or datetime.datetime.now() - last_call > timeout: last_call = datetime.datetime.now() return f(*args, **kwargs) return None return wrapper return decorator

как-то так

The Death
19.01.2018
10:21:21
Спасибо!

Anton
19.01.2018
10:24:17
erratum: написал с опечатками во всех местах. при использовании исправить supressor на suppressor ?

Nikita
19.01.2018
10:42:25
Всем привет! Помогите, пожалуйста, настроить cron для регулярного запуска двух скриптов .sh Скрипты используются для web приложения на python/flask, и для их запуска должно активироваться вирутальное окружение питона. Один скрипт должен запускаться каждые 5 минут, другой каждый час. Вроде всё сделал, ошибок нет, но скрипт не запускается...

Vladislav
19.01.2018
10:42:49
логи смотри

права возможно не зашли

Aragaer
19.01.2018
10:43:03
Каждые 5 минут это вроде */5 * * * * * *

а каждый час это 0 * * * * * *

Nikita
19.01.2018
10:43:19
логи смотри
в логах пусто, в том то и дело

Vladislav
19.01.2018
10:43:39
не может быть пусто

ос какая?

Aragaer
19.01.2018
10:44:02
в скрипты впиши, чтобы они в какой-то текстовый файл что-нибудь писали

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