Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
2 / 2 / 0
Регистрация: 08.06.2018
Сообщений: 66

Сохранить переменную Apscheduler scheduler в памяти

05.08.2020, 09:54. Показов 1910. Ответов 8

Студворк — интернет-сервис помощи студентам
Я хочу сохранить экземпляр BackgroundScheduler который я использовал чтобы отложить действие.

У меня есть веб-приложение джанго. В админке я создаю модель уведомления. После сохранения я через save_model откладываю это уведомление на дату которая была указана в нем же. И после мне приходит письмо на почту в нужное время и все прекрасно все радуются. Но вот что если мне нужно изменить это уведомление?? Или вовсе удалить. Экземпляр шедулера теряется после того как отложишь действие на потом.

А только с его помощью можно изменить или удалить запланированное действие. Поэтому с помощью нескольких "return"-ов я поднял нужную мне переменную до файла admin.py

А теперь вопрос - как эту переменную сохранить а главное где? Чтобы можно было например отловить удаление модели и после него удалить отложенное действие, или также но изменить. Голову ломаю а инфы никакой не нашел. Кто может сталкивался хоть с чем-то подобным, или может я просто неправильный алгоритм построил? В общем заранее спасибо за любой совет ; )
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.08.2020, 09:54
Ответы с готовыми решениями:

Сохранить переменную в памяти
Как через php, можно сохранить переменную в апперативной памяти сервера?

Сохранить в памяти переменную из временной формы
Привет всем! Чувствую себя лузером, поэтому прошу помочь! В программе, которую пишу, есть 2 формы: главная и вспомогательная (с...

Сохранить и прочитать из памяти переменную типа word
имеется программа которая читает показания с датчиков и сохраняет их в память а при получении запроса передает их блоку связи. но есть одна...

8
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
05.08.2020, 10:44
Нельзя ли прояснить вопрос?. Я представляю себе задачу так: в заданное время пойти в БД, взять уведомление и емейл и отправить его. Т.е. уведомление всегда будет актуальным. Так подходит?
0
2 / 2 / 0
Регистрация: 08.06.2018
Сообщений: 66
05.08.2020, 11:19  [ТС]
Kifsif, сразу же после создания иду в бд беру уведомление и отправляю его с датой и временем менеджеру-планировщику в лице BackgroundScheduler c apscheduler.

Добавлено через 4 минуты
Я проясню немного, я хочу сделать что-то в таком стиле - http://effbot.org/pyfaq/how-do... odules.htm
Почему что-то в таком а не такое же - потому что в таком же виде не работает((

при создании я вывожу в консоль переменную и вижу:
scheduler: <apscheduler.schedulers.background.Backg roundScheduler object at 0x7ffa95410e50>
а потом в нужный мне момент с другого файла:
scheduler: <apscheduler.schedulers.background.Backg roundScheduler object at 0x7f574fad8760>

кароче суть в том что они разные(

Добавлено через 5 минут
scheduler.py:

Python
1
2
3
from apscheduler.schedulers.background import BackgroundScheduler
 
main_scheduler = BackgroundScheduler(daemon=True)

stats_scheduler.py:

Python
1
2
3
4
5
6
7
from . import scheduler
 
scheduler.main_scheduler.add_job(check_stats, 'interval', minutes=1, max_instances=1) 
 
scheduler.main_scheduler.start()
 
print(scheduler.main_scheduler)

admin.py :

Python
1
2
3
from . import scheduler, stats_scheduler
 
print(scheduler.main_scheduler)
Добавлено через 26 секунд
код частичный и это тестовый пример

Добавлено через 40 секунд
в двух местах где принчу - нужна одна и таже переменная, но они разные по какой-то причине

Добавлено через 1 минуту
stats_scheduler запускаю на старте
а в админке принчу когда создам модель
0
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
05.08.2020, 11:23
Почему вам не подошла предложенная мной схема, когда планировщик просто берет перед отправкой из базы данных самое актуальное содержимое?
0
2 / 2 / 0
Регистрация: 08.06.2018
Сообщений: 66
05.08.2020, 11:44  [ТС]
Kifsif, все равно нужно отправляь планировщику дату, тогда почему бы и не отправить все.
Но ваш подход решает все проблемы кроме одной - я не смогу изменить дату.Потому что ее все-равно нужно менять в самом планировщике, и если при обработке можно сравнить дату с текущей и если она позже то перенести отправку, то что если дату изменили на пораньше? Тогда планировщик не узнает и никак не скоректирует время.

А учитывая что я собираюсь делать несколько вещей с планировщиком, то полезно было бы иметь один глобальный на все приложение джанго. Так управлять заданиями будет в разы проще.
0
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
05.08.2020, 11:50
Цитата Сообщение от anton3d Посмотреть сообщение
Но ваш подход решает все проблемы кроме одной - я не смогу изменить дату.
Как так-то? Сохраните в БД дату отправки. Планировщик по расписанию пошел, достал данные. Смотрит - дата отправки больше текущей. Создает новое задание планировщику с новой датой, а сам ничего не делает.
0
2 / 2 / 0
Регистрация: 08.06.2018
Сообщений: 66
05.08.2020, 13:32  [ТС]
Kifsif, вот именно, а что если дата уже прошла? Я обьясню

в 10:00 вы добавляете уведомление. Ставите дату отправки в 17:00.
потом в полдень у вас что-то изменилось и вы переносите время на завтра 18:00.
(Планировщик сегодня в 17:00 вытягивает дату и видит что она изменена на завтра 18:00 - соответственно переносит свою дату на завтра 18:00)

Вот так все работает. Но вот контрпример:

в 10:00 вы добавляете уведомление. Ставите дату отправки в 17:00.
потом в полдень у вас что-то изменилось и вы переносите время(в базе) на сегодня в 16:00.
(Планировщик сегодня в 17:00 вытягивает дату и видит что она изменена на уже минувшую - соответственно срок отправки истек и в прошлое он никак не отправит сообщение)

Добавлено через 49 секунд
т.е с датой больше текущей работает, но с меньше текущей никак
0
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
05.08.2020, 14:22
Ну, не знаю, разбирайтесь. Надо бы грохнуть просто неактуальную задачу из очереди как-то.
0
2 / 2 / 0
Регистрация: 08.06.2018
Сообщений: 66
05.08.2020, 14:56  [ТС]
Нашел решение.

Можно добавить нужную вам переменную в ваш AppConfig как атрибут.
Тогда можно будет с любого места в коде получить доступ к нему:


from django.apps import apps
apps.get_app_config('имя_приложения').ва ш_атрибут
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.08.2020, 14:56
Помогаю со студенческими работами здесь

Как сохранить в переменную другую переменную + текст?
Нужно сохранить в одной переменной несколько переменных + текст, что бы потом все это дело вывести на экран. Т.е., что то в роде: ...

Можно ли разместить переменную в нужную ячейку памяти и реально ли хранить данные, разбросанными по памяти?
Добрый день. Не могу найти информацию по двум вопросам : 1) могу ли я разместить переменную в нужную ячейку памяти. Например: int a...

Какое количество адресов содержатся в памяти компьютера, как выделяется разное количество памяти под переменную?
Значит распишу смысл вопроса. Мы создаём переменную например типа int или любого другого. Каждая переменная имеет адрес где храниться...

Сохранить переменную
Как можно сохранить как то переменную Вот такой код: $referer = null; $host = null; if(!empty($_SERVER)){ $referer =...

Сохранить переменную
Доброго времени суток, товарищи. Задача: необходимо сохранить переменную по известному адресу, а затем её оттуда считать. Как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru