
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 что то не получилось
это телеграмм бот

Demuz
19.01.2018
09:49:54

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 - задача сама прекратится

Demuz
19.01.2018
09:54:01

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

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

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

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

The Death
19.01.2018
09:59:44

Anton
19.01.2018
10:00:02

Ярослав
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 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

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)
изоляция логики позволяет лучше декомпозировать ваше приложение
параметризованный декоратор в данном случае очень хорошо подходит
позже сможете сохранять его состояние в БД, если будет необходимость. при этом не трогая основной код

Demuz
19.01.2018
10:15:55

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
в скрипты впиши, чтобы они в какой-то текстовый файл что-нибудь писали